diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index de4599c1..474bb65e 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -3,18 +3,17 @@ import java.io.IOException; import java.util.function.Function; import java.util.function.Predicate; +import java.util.Objects; public class Task01Main { 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 +22,8 @@ public static Function ternaryOperator( Function ifTrue, Function ifFalse) { - return null; // your implementation here + if (condition == null || ifTrue == null || ifFalse == null) throw new NullPointerException(); + return x -> condition.test(x) ? ifTrue.apply(x) : ifFalse.apply(x); // your implementation here } } diff --git a/task02/src/com/example/task02/Task02Main.java b/task02/src/com/example/task02/Task02Main.java index 309260d8..b8e614f1 100644 --- a/task02/src/com/example/task02/Task02Main.java +++ b/task02/src/com/example/task02/Task02Main.java @@ -6,18 +6,19 @@ 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(); + return IntStream.iterate(0, i -> i + 1).map(i -> getGrayCode(i % (int) Math.pow(2, n))); - return null; // your implementation here - + } + private static int getGrayCode(int g) { + return g ^ (g >> 1); } } diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 254d5cb0..d7d6971b 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -3,25 +3,25 @@ import java.util.Comparator; import java.util.function.BiConsumer; import java.util.stream.Stream; +import java.util.Iterator; public class Task03Main { public static void main(String[] args) { - findMinMax( - Stream.of(2, 9, 5, 4, 8, 1, 3), - Integer::compareTo, - (min, max) -> - System.out.println("min: " + min + " / max: " + max) - ); + findMinMax(Stream.of(2, 9, 5, 4, 8, 1, 3), Integer::compareTo, (min, max) -> System.out.println("min: " + min + " / max: " + max)); } - public static void findMinMax( - Stream stream, - Comparator order, - BiConsumer minMaxConsumer) { - - // your implementation here + public static void findMinMax(Stream stream, Comparator order, BiConsumer minMaxConsumer){ + Iterator iterator = stream.iterator(); + T current = iterator.hasNext() ? iterator.next() : null; + T min = current, max = current; + while (iterator.hasNext()) { + current = iterator.next(); + min = order.compare(current, min) < 0 ? current : min; + max = order.compare(current, max) > 0 ? current : max; + } + minMaxConsumer.accept(min, max); } } diff --git a/task04/src/com/example/task04/Task04Main.java b/task04/src/com/example/task04/Task04Main.java index 1e38e6eb..0b80b15c 100644 --- a/task04/src/com/example/task04/Task04Main.java +++ b/task04/src/com/example/task04/Task04Main.java @@ -1,10 +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.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() + .flatMap(x -> Stream.of(x.split("\\P{L}")) + .filter(t -> !t.isEmpty()) + .map(String::toLowerCase)) + .collect(Collectors.groupingBy(t -> t, Collectors.counting())) + .entrySet() + .stream() + .sorted(Map.Entry.comparingByKey()) + .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) + .limit(10) + .map(Map.Entry::getKey) + .forEach(t -> System.out.print(t + '\n')); } diff --git a/task05/src/com/example/task05/Mail.java b/task05/src/com/example/task05/Mail.java new file mode 100644 index 00000000..008d63c9 --- /dev/null +++ b/task05/src/com/example/task05/Mail.java @@ -0,0 +1,6 @@ +package com.example.task05; +public interface Mail { + 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..d49f6228 --- /dev/null +++ b/task05/src/com/example/task05/MailMessage.java @@ -0,0 +1,23 @@ +package com.example.task05; +public class MailMessage implements Mail { + 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..de7f547e --- /dev/null +++ b/task05/src/com/example/task05/MailService.java @@ -0,0 +1,23 @@ +package com.example.task05; + +import java.util.*; +import java.util.function.Consumer; +import java.util.stream.Collectors; + +public class MailService implements Consumer> { + private final Map> mailBox = new HashMap<>(); + + @Override + public void accept(Mail mail) { + mailBox.computeIfAbsent(mail.getTo(), k -> new ArrayList<>()).add(mail.getContent()); + } + + public Map> getMailBox() { + return mailBox.entrySet() + .stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + e -> Collections.unmodifiableList(e.getValue()) + )); + } +} \ No newline at end of file diff --git a/task05/src/com/example/task05/Salary.java b/task05/src/com/example/task05/Salary.java new file mode 100644 index 00000000..4297f6c0 --- /dev/null +++ b/task05/src/com/example/task05/Salary.java @@ -0,0 +1,28 @@ +package com.example.task05; + +public class Salary implements Mail { + private final String from; + private final String to; + private final Integer salary; + + public Salary(String from, String to, Integer 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..68696f56 100644 --- a/task05/src/com/example/task05/Task05Main.java +++ b/task05/src/com/example/task05/Task05Main.java @@ -9,7 +9,6 @@ public class Task05Main { public static void main(String[] args) { - /* // Random variables String randomFrom = "..."; // Некоторая случайная строка. Можете выбрать ее самостоятельно. @@ -88,7 +87,6 @@ public static void main(String[] args) { assert salaries.get(randomTo).equals(Arrays.asList(randomSalary)) : "wrong salaries mailbox content (3)"; - */ }