diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index de4599c1..c036649d 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,12 +10,12 @@ public static void main(String[] args) throws IOException { // TODO С корректно реализованным методом ternaryOperator должен компилироваться и успешно работать следующий код: - /* + Predicate condition = Objects::isNull; Function ifTrue = obj -> 0; Function ifFalse = CharSequence::length; Function safeStringLength = ternaryOperator(condition, ifTrue, ifFalse); - */ + } @@ -23,7 +24,6 @@ public static Function ternaryOperator( Function ifTrue, Function ifFalse) { - return null; // your implementation here - + return t -> condition.test(t) ? ifTrue.apply(t) : ifFalse.apply(t); // your implementation here } } diff --git a/task02/src/com/example/task02/Task02Main.java b/task02/src/com/example/task02/Task02Main.java index 309260d8..90f4efb9 100644 --- a/task02/src/com/example/task02/Task02Main.java +++ b/task02/src/com/example/task02/Task02Main.java @@ -6,18 +6,23 @@ public class Task02Main { public static void main(String[] args) { - /* + cycleGrayCode(2) .limit(10) .forEach(System.out::println); - */ + } public static IntStream cycleGrayCode(int n) { - - return null; // your implementation here - + if (n > 16 || n < 1) { + throw new IllegalArgumentException(); + } + + IntStream stream = IntStream + .iterate(0, + i -> (i + 1) % (int) Math.pow(2, n)) + .map(i -> i ^ (i >> 1)); + return stream; // your implementation here } - } diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 254d5cb0..5e36fcbe 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -1,7 +1,11 @@ package com.example.task03; import java.util.Comparator; +import java.util.Iterator; +import java.util.Objects; +import java.util.Optional; import java.util.function.BiConsumer; +import java.util.function.Consumer; import java.util.stream.Stream; public class Task03Main { @@ -14,7 +18,6 @@ public static void main(String[] args) { (min, max) -> System.out.println("min: " + min + " / max: " + max) ); - } public static void findMinMax( @@ -22,6 +25,31 @@ public static void findMinMax( Comparator order, BiConsumer minMaxConsumer) { + Iterator iterator = stream.iterator(); + + T min = null; + T max = null; + + if (iterator.hasNext()) { + min = iterator.next(); + max = min; + } + + while (iterator.hasNext()) { + T a = iterator.next(); + + int compMin = order.compare(a, min); + int compMax = order.compare(a, max); + + if (compMin <= 0) { + min = a; + } + if (compMax >= 0) { + max = a; + } + } + + minMaxConsumer.accept(min, max); // your implementation here } } diff --git a/task04/src/com/example/task04/Task04Main.java b/task04/src/com/example/task04/Task04Main.java index 1e38e6eb..aadf65b5 100644 --- a/task04/src/com/example/task04/Task04Main.java +++ b/task04/src/com/example/task04/Task04Main.java @@ -1,11 +1,38 @@ package com.example.task04; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.Comparator; +import java.util.Map; +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)); + Stream stream = reader.lines(); - } + String result = stream + .flatMap(line -> Arrays.stream( + line.split("[^\\p{L}\\p{N}]+"))) + .map(String::toLowerCase) + .filter(word -> !word.isEmpty()) + .collect(Collectors.groupingBy( + word -> word, + Collectors.counting())) + .entrySet() + .stream() + .sorted(Map.Entry.comparingByValue() + .reversed() + .thenComparing(Map.Entry.comparingByKey())) + .limit(10) + .map(Map.Entry::getKey) + .collect(Collectors.joining("\n")); + System.out.println(result); + } } diff --git a/task05/resources/TestsImpl.java b/task05/resources/TestsImpl.java index 69276e9f..51135e8f 100644 --- a/task05/resources/TestsImpl.java +++ b/task05/resources/TestsImpl.java @@ -1,6 +1,5 @@ package com.example.task05; -import com.example.task05.ITests; import org.junit.Test; import java.util.Arrays; @@ -47,7 +46,7 @@ public void testExample() { ); // Создание почтового сервиса. - MailService mailService = new MailService<>(); + MailService mailService = new MailService(); // Обработка списка писем почтовым сервисом messages.stream().forEachOrdered(mailService); @@ -78,7 +77,7 @@ public void testExample() { Salary salary3 = new Salary(randomFrom, randomTo, randomSalary); // Создание почтового сервиса, обрабатывающего зарплаты. - MailService salaryService = new MailService<>(); + MailService salaryService = new MailService(); // Обработка списка зарплат почтовым сервисом Arrays.asList(salary1, salary2, salary3).forEach(salaryService); diff --git a/task05/src/com/example/task05/MailMessage.java b/task05/src/com/example/task05/MailMessage.java new file mode 100644 index 00000000..4715b2e8 --- /dev/null +++ b/task05/src/com/example/task05/MailMessage.java @@ -0,0 +1,12 @@ +package com.example.task05; + +public class MailMessage extends TypeMessage { + + public MailMessage(String from, String to, String content) { + super(from, to, content); + } + + public String getContent() { + return super.getMessage(); + } +} diff --git a/task05/src/com/example/task05/MailService.java b/task05/src/com/example/task05/MailService.java new file mode 100644 index 00000000..bf259b46 --- /dev/null +++ b/task05/src/com/example/task05/MailService.java @@ -0,0 +1,28 @@ +package com.example.task05; + +import java.lang.reflect.Array; +import java.util.*; +import java.util.function.Consumer; + +public class MailService implements Consumer> { + + Map> mailBox = new HashMap>() { + @Override + public List get(Object key) { + List list = super.get(key); + if (list == null) return new ArrayList<>(); + return list; + } + }; + + @Override + public void accept(TypeMessage message) { + String to = message.getTo(); + T m = message.getMessage(); + mailBox.computeIfAbsent(to, key -> new ArrayList<>()).add(m); + } + + public Map> getMailBox() { + return mailBox; + } +} diff --git a/task05/src/com/example/task05/Salary.java b/task05/src/com/example/task05/Salary.java new file mode 100644 index 00000000..101c6442 --- /dev/null +++ b/task05/src/com/example/task05/Salary.java @@ -0,0 +1,8 @@ +package com.example.task05; + +public class Salary extends TypeMessage { + + public Salary (String from, String to, int salary) { + super(from, to, salary); + } +} diff --git a/task05/src/com/example/task05/Task05Main.java b/task05/src/com/example/task05/Task05Main.java index ae31f6bc..225e7b69 100644 --- a/task05/src/com/example/task05/Task05Main.java +++ b/task05/src/com/example/task05/Task05Main.java @@ -9,11 +9,9 @@ public class Task05Main { public static void main(String[] args) { - /* - // Random variables - String randomFrom = "..."; // Некоторая случайная строка. Можете выбрать ее самостоятельно. - String randomTo = "..."; // Некоторая случайная строка. Можете выбрать ее самостоятельно. + String randomFrom = "Robert Howard"; // Некоторая случайная строка. Можете выбрать ее самостоятельно. + String randomTo = "My Friend"; // Некоторая случайная строка. Можете выбрать ее самостоятельно. int randomSalary = 100; // Некоторое случайное целое положительное число. Можете выбрать его самостоятельно. // Создание списка из трех почтовых сообщений. @@ -44,7 +42,7 @@ public static void main(String[] args) { ); // Создание почтового сервиса. - MailService mailService = new MailService<>(); + MailService mailService = new MailService(); // Обработка списка писем почтовым сервисом messages.stream().forEachOrdered(mailService); @@ -86,10 +84,5 @@ 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)"; - - - */ - } - } diff --git a/task05/src/com/example/task05/TypeMessage.java b/task05/src/com/example/task05/TypeMessage.java new file mode 100644 index 00000000..b18b80c0 --- /dev/null +++ b/task05/src/com/example/task05/TypeMessage.java @@ -0,0 +1,26 @@ +package com.example.task05; + +public class TypeMessage { + + final private String from; + final private String to; + final private T message; + + public TypeMessage(String from, String to, T message) { + this.from = from; + this.to = to; + this.message = message; + } + + public String getFrom() { + return from; + } + + public String getTo() { + return to; + } + + public T getMessage() { + return message; + } +}