diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index de4599c1..e5116740 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -1,6 +1,7 @@ package com.example.task01; import java.io.IOException; +import java.util.Objects; import java.util.function.Function; import java.util.function.Predicate; @@ -9,13 +10,9 @@ public static void main(String[] args) throws IOException { // TODO С корректно реализованным методом ternaryOperator должен компилироваться и успешно работать следующий код: - /* Predicate condition = Objects::isNull; - Function ifTrue = obj -> 0; - Function ifFalse = CharSequence::length; + Function ifTrue = obj -> 0; Function ifFalse = CharSequence::length; Function safeStringLength = ternaryOperator(condition, ifTrue, ifFalse); - */ - } public static Function ternaryOperator( @@ -23,7 +20,9 @@ public static Function ternaryOperator( Function ifTrue, Function ifFalse) { - return null; // your implementation here + if (condition == null || ifTrue == null || ifFalse == null) + throw new NullPointerException(); + return t -> condition.test(t) ? ifTrue.apply(t) : ifFalse.apply(t); } } diff --git a/task02/src/com/example/task02/Task02Main.java b/task02/src/com/example/task02/Task02Main.java index 309260d8..3fed5cb2 100644 --- a/task02/src/com/example/task02/Task02Main.java +++ b/task02/src/com/example/task02/Task02Main.java @@ -5,19 +5,25 @@ public class Task02Main { public static void main(String[] args) { - - /* cycleGrayCode(2) .limit(10) .forEach(System.out::println); - */ - } public static IntStream cycleGrayCode(int n) { + if (n < 1 || n > 16) { + throw new IllegalArgumentException("n должно быть от 1 до 16"); + } + + int totalNumbers = 1 << n; + int[] grayCodes = new int[totalNumbers]; - return null; // your implementation here + for (int i = 0; i < totalNumbers; i++) { + grayCodes[i] = i ^ (i >> 1); + } + return IntStream.iterate(0, i -> (i + 1) % totalNumbers) + .map(i -> grayCodes[i]); } } diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 254d5cb0..d0b7162f 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -3,6 +3,7 @@ import java.util.Comparator; import java.util.function.BiConsumer; import java.util.stream.Stream; +import java.util.Iterator; public class Task03Main { @@ -22,6 +23,25 @@ public static void findMinMax( Comparator order, BiConsumer minMaxConsumer) { - // your implementation here + Iterator iterator = stream.iterator(); + T min = null; + T max = null; + + if (iterator.hasNext()){ + min = iterator.next(); + max = min; + } + + while (iterator.hasNext()){ + T currentElement = iterator.next(); + + if (order.compare(currentElement,min) < 0) + min = currentElement; + + if (order.compare(currentElement,max) > 0) + max = currentElement; + } + + minMaxConsumer.accept(min,max); } } diff --git a/task04/src/com/example/task04/Task04Main.java b/task04/src/com/example/task04/Task04Main.java index 1e38e6eb..defa42be 100644 --- a/task04/src/com/example/task04/Task04Main.java +++ b/task04/src/com/example/task04/Task04Main.java @@ -1,11 +1,29 @@ package com.example.task04; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.Comparator; +import java.util.Map; +import java.util.function.ToLongFunction; +import java.util.stream.Collectors; +import java.util.stream.Stream; + public class Task04Main { public static void main(String[] args) { - - // your implementation here - + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + reader.lines() + .map(String::toLowerCase) + .flatMap(x -> Stream.of(x.split("[^a-zа-яё0-9]"))) + .filter(x -> !x.isEmpty()) + .collect(Collectors.groupingBy(x -> x, Collectors.counting())) + .entrySet() + .stream() + .sorted(Comparator.comparingLong((ToLongFunction>) Map.Entry::getValue) + .reversed() + .thenComparing(Map.Entry::getKey)) + .limit(10) + .forEach(t -> System.out.print(t.getKey() + "\n")); } } diff --git a/task05/src/com/example/task05/MailContent.java b/task05/src/com/example/task05/MailContent.java new file mode 100644 index 00000000..5312562c --- /dev/null +++ b/task05/src/com/example/task05/MailContent.java @@ -0,0 +1,7 @@ +package com.example.task05; + +public interface MailContent { + String getFrom(); + String getTo(); + T getContent(); +} diff --git a/task05/src/com/example/task05/MailMessage.java b/task05/src/com/example/task05/MailMessage.java new file mode 100644 index 00000000..3161f4c7 --- /dev/null +++ b/task05/src/com/example/task05/MailMessage.java @@ -0,0 +1,28 @@ +package com.example.task05; + +public class MailMessage implements MailContent { + private final String from; + private final String to; + private final String content; + + public MailMessage(String from, String to, String content) { + this.from = from; + this.to = to; + this.content = content; + } + + @Override + public String getFrom() { + return from; + } + + @Override + public String getTo() { + return to; + } + + @Override + public String getContent() { + return content; + } +} diff --git a/task05/src/com/example/task05/MailService.java b/task05/src/com/example/task05/MailService.java new file mode 100644 index 00000000..2572bf39 --- /dev/null +++ b/task05/src/com/example/task05/MailService.java @@ -0,0 +1,31 @@ +package com.example.task05; + +import java.util.*; +import java.util.function.Consumer; + +public class MailService implements Consumer> { + private final Map> mailBox = new HashMap<>(); + + @Override + public void accept(MailContent mailContent) { + String to = mailContent.getTo(); + T content = mailContent.getContent(); + + mailBox.computeIfAbsent(to, k -> new ArrayList<>()).add(content); + } + + public Map> getMailBox() { + return new AbstractMap>() { + @Override + public Set>> entrySet() { + return mailBox.entrySet(); + } + + @Override + public List get(Object key) { + List result = mailBox.get(key); + return result != null ? result : Collections.emptyList(); + } + }; + } +} diff --git a/task05/src/com/example/task05/Salary.java b/task05/src/com/example/task05/Salary.java new file mode 100644 index 00000000..7ba77211 --- /dev/null +++ b/task05/src/com/example/task05/Salary.java @@ -0,0 +1,28 @@ +package com.example.task05; + +public class Salary implements MailContent { + private final String from; + private final String to; + private final int salary; + + public Salary(String from, String to, int salary) { + this.from = from; + this.to = to; + this.salary = salary; + } + + @Override + public String getFrom() { + return from; + } + + @Override + public String getTo() { + return to; + } + + @Override + public Integer getContent() { + return salary; + } +} diff --git a/task05/src/com/example/task05/Task05Main.java b/task05/src/com/example/task05/Task05Main.java index ae31f6bc..29b80c50 100644 --- a/task05/src/com/example/task05/Task05Main.java +++ b/task05/src/com/example/task05/Task05Main.java @@ -8,12 +8,9 @@ public class Task05Main { public static void main(String[] args) { - - /* - // Random variables - String randomFrom = "..."; // Некоторая случайная строка. Можете выбрать ее самостоятельно. - String randomTo = "..."; // Некоторая случайная строка. Можете выбрать ее самостоятельно. + String randomFrom = "Мама сшила мне штаны"; // Некоторая случайная строка. Можете выбрать ее самостоятельно. + String randomTo = "Из березовой коры"; // Некоторая случайная строка. Можете выбрать ее самостоятельно. int randomSalary = 100; // Некоторое случайное целое положительное число. Можете выбрать его самостоятельно. // Создание списка из трех почтовых сообщений. @@ -86,10 +83,6 @@ public static void main(String[] args) { assert salaries.get(salary1.getTo()).equals(Arrays.asList(1)) : "wrong salaries mailbox content (1)"; assert salaries.get(salary2.getTo()).equals(Arrays.asList(Integer.MAX_VALUE)) : "wrong salaries mailbox content (2)"; assert salaries.get(randomTo).equals(Arrays.asList(randomSalary)) : "wrong salaries mailbox content (3)"; - - - */ - } }