diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index de4599c1..d5c9b023 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,17 @@ public static Function ternaryOperator( Function ifTrue, Function ifFalse) { - return null; // your implementation here + if (condition == null || ifTrue == null || ifFalse == null) { + throw new NullPointerException(); + } + + return input -> { + if (condition.test(input)) { + return ifTrue.apply(input); + } else { + return ifFalse.apply(input); + } + }; } } diff --git a/task02/src/com/example/task02/Task02Main.java b/task02/src/com/example/task02/Task02Main.java index 309260d8..63800b29 100644 --- a/task02/src/com/example/task02/Task02Main.java +++ b/task02/src/com/example/task02/Task02Main.java @@ -16,7 +16,14 @@ public static void main(String[] args) { public static IntStream cycleGrayCode(int n) { - return null; // your implementation here + if (n < 1 || n > 16) { + throw new IllegalArgumentException("Invalid bit rate."); + } + + int size = (int) Math.pow(2, n); + + return IntStream.iterate(0, code -> (code + 1) % size) + .map(code -> code ^ (code >> 1)); } diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 254d5cb0..42deedc2 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,28 @@ public static void findMinMax( Comparator order, BiConsumer minMaxConsumer) { - // your implementation here + Iterator iterator = stream.iterator(); + + T minimum = null; + T maximum = null; + + if (iterator.hasNext()) { + minimum = iterator.next(); + maximum = iterator.next(); + + while (iterator.hasNext()) { + T current = iterator.next(); + + if (order.compare(current, minimum) < 0) { + minimum = current; + } + + if (order.compare(current, maximum) > 0) { + maximum = current; + } + } + } + + minMaxConsumer.accept(minimum, maximum); } } diff --git a/task04/src/com/example/task04/Task04Main.java b/task04/src/com/example/task04/Task04Main.java index 1e38e6eb..b72ba2da 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.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + public class Task04Main { public static void main(String[] args) { - // your implementation here + new BufferedReader(new InputStreamReader(System.in)) + .lines() + .map(String::toLowerCase) + .filter(line -> !line.isEmpty()) + .flatMap(line -> Stream.of(line.split("[\\p{Punct}\\s]+"))) + .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())) + .entrySet() + .stream() + .sorted(Map.Entry.comparingByKey()) + .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) + .limit(10) + .forEach(word -> System.out.println(word.getKey())); } diff --git a/task05/src/com/example/task05/Dispatchable.java b/task05/src/com/example/task05/Dispatchable.java new file mode 100644 index 00000000..87412b8b --- /dev/null +++ b/task05/src/com/example/task05/Dispatchable.java @@ -0,0 +1,7 @@ +package com.example.task05; + +public interface Dispatchable { + String getTo(); + String getFrom(); + 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..32c60785 --- /dev/null +++ b/task05/src/com/example/task05/MailMessage.java @@ -0,0 +1,28 @@ +package com.example.task05; + +public class MailMessage implements Dispatchable { + final private String from; + final private String to; + final private String content; + + public MailMessage(String from, String to, String content) { + this.from = from; + this.to = to; + this.content = content; + } + + @Override + public String getTo() { + return to; + } + + @Override + public String getFrom() { + return from; + } + + @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..6aace12a --- /dev/null +++ b/task05/src/com/example/task05/MailService.java @@ -0,0 +1,25 @@ +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 List get(Object key) { + return super.getOrDefault(key, Collections.emptyList()); + } + }; + + @Override + public void accept(Dispatchable mail) { + mailBox + .computeIfAbsent(mail.getTo(), key -> new ArrayList<>()) + .add(mail.getContent()); + } + + 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..7b266774 --- /dev/null +++ b/task05/src/com/example/task05/Salary.java @@ -0,0 +1,28 @@ +package com.example.task05; + +public class Salary implements Dispatchable { + final private String from; + final private String to; + final private Integer amount; + + public Salary(String from, String to, Integer amount) { + this.from = from; + this.to = to; + this.amount = amount; + } + + @Override + public String getTo() { + return to; + } + + @Override + public String getFrom() { + return from; + } + + @Override + public Integer getContent() { + return amount; + } +} diff --git a/task05/src/com/example/task05/Task05Main.java b/task05/src/com/example/task05/Task05Main.java index ae31f6bc..065eadf3 100644 --- a/task05/src/com/example/task05/Task05Main.java +++ b/task05/src/com/example/task05/Task05Main.java @@ -9,7 +9,7 @@ public class Task05Main { public static void main(String[] args) { - /* + // Random variables String randomFrom = "..."; // Некоторая случайная строка. Можете выбрать ее самостоятельно. @@ -88,7 +88,7 @@ public static void main(String[] args) { assert salaries.get(randomTo).equals(Arrays.asList(randomSalary)) : "wrong salaries mailbox content (3)"; - */ + }