diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index de4599c1..4586310d 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,21 +10,27 @@ 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); - */ + } public static Function ternaryOperator( Predicate condition, Function ifTrue, - Function ifFalse) { - - return null; // your implementation here + Function ifFalse) + { + if(condition == null || ifTrue == null || ifFalse == null) + throw new NullPointerException(); + + return arg -> { + if(!condition.test(arg)) return ifFalse.apply(arg); + return ifTrue.apply(arg); + }; } } diff --git a/task02/src/com/example/task02/Task02Main.java b/task02/src/com/example/task02/Task02Main.java index 309260d8..7a176c0b 100644 --- a/task02/src/com/example/task02/Task02Main.java +++ b/task02/src/com/example/task02/Task02Main.java @@ -6,17 +6,22 @@ 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 + public static IntStream cycleGrayCode(int n) + { + if(!(n <= 16 && n >= 1)) + throw new IllegalArgumentException(); + return IntStream + .iterate(0, x -> x+1) + .map(x -> x % (int)Math.pow(2, n)) + .map(x -> x^(x>>1)); } diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 254d5cb0..b1d75efc 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -1,6 +1,7 @@ package com.example.task03; import java.util.Comparator; +import java.util.Iterator; import java.util.function.BiConsumer; import java.util.stream.Stream; @@ -22,6 +23,26 @@ public static void findMinMax( Comparator order, BiConsumer minMaxConsumer) { - // your implementation here + Iterator iter = stream.iterator(); + + if(iter.hasNext()) + { + T min = iter.next(); + T max = min; + + while (iter.hasNext()) + { + T element = iter.next(); + + if (order.compare(element, max) >= 0) + max = element; + else if(order.compare(element, min) < 0 ) + min = element; + } + minMaxConsumer.accept(min, max); + return; + } + + minMaxConsumer.accept(null, null); } } diff --git a/task04/src/com/example/task04/Task04Main.java b/task04/src/com/example/task04/Task04Main.java index 1e38e6eb..b64518a2 100644 --- a/task04/src/com/example/task04/Task04Main.java +++ b/task04/src/com/example/task04/Task04Main.java @@ -1,10 +1,31 @@ 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 class Task04Main +{ - public static void main(String[] args) { + public static void main(String[] args) + { + Stream stream = new BufferedReader(new InputStreamReader(System.in)).lines(); - // your implementation here + stream + .map(String::toLowerCase) + .flatMap(x -> Stream.of(x.split("[^a-zа-яё0-9]"))) + .filter(x -> !x.isEmpty()) + .collect(Collectors.groupingBy(n -> n, Collectors.counting())) + .entrySet() + .stream() + .sorted(Comparator.comparingLong((ToLongFunction>) Map.Entry::getValue) + .reversed() + .thenComparing(Map.Entry::getKey)) + .limit(10) + .forEach(x -> System.out.print(x.getKey() + '\n')); } diff --git a/task05/src/com/example/task05/AbstractMessage.java b/task05/src/com/example/task05/AbstractMessage.java new file mode 100644 index 00000000..17d946b3 --- /dev/null +++ b/task05/src/com/example/task05/AbstractMessage.java @@ -0,0 +1,23 @@ +package com.example.task05; + +public abstract class AbstractMessage { + + private final String from; + + public final String getFrom() { + return from; + } + + private final String to; + + public final String getTo() { + return to; + } + + public abstract T getContent(); + + public AbstractMessage(String from, String to) { + this.to = to; + this.from = from; + } +} \ No newline at end of file diff --git a/task05/src/com/example/task05/MailMessage.java b/task05/src/com/example/task05/MailMessage.java new file mode 100644 index 00000000..cca0eb9f --- /dev/null +++ b/task05/src/com/example/task05/MailMessage.java @@ -0,0 +1,16 @@ +package com.example.task05; + +public class MailMessage extends AbstractMessage { + + private final String content; + + @Override + public String getContent() { + return content; + } + + public MailMessage(String from, String to, String message) { + super(from, to); + this.content = message; + } +} \ No newline at end of file diff --git a/task05/src/com/example/task05/MailService.java b/task05/src/com/example/task05/MailService.java new file mode 100644 index 00000000..88fff6a2 --- /dev/null +++ b/task05/src/com/example/task05/MailService.java @@ -0,0 +1,37 @@ +package com.example.task05; + +import java.util.function.Consumer; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +public class MailService implements Consumer { + + private Map> mailBox = new TreeMap>() { + @Override + public List get(Object key) { + if (super.get(key) == null) { + super.put((String) key, new ArrayList<>()); + } + + return super.get(key); + } + }; + + public Map> getMailBox() { + return mailBox; + } + + public MailService() { + + } + + @Override + public void accept(Object o) { + AbstractMessage message = (AbstractMessage) o; + mailBox.putIfAbsent(message.getTo(), new ArrayList<>()); + mailBox.computeIfAbsent(message.getTo(), k -> new ArrayList<>()); + mailBox.get(message.getTo()).add((T) message.getContent()); + } +} \ 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..96e2025f --- /dev/null +++ b/task05/src/com/example/task05/Salary.java @@ -0,0 +1,16 @@ +package com.example.task05; + +public class Salary extends AbstractMessage { + + private final int content; + + @Override + public Integer getContent() { + return content; + } + + public Salary(String from, String to, int content) { + super(from, to); + this.content = content; + } +} \ No newline at end of file diff --git a/task05/src/com/example/task05/Task05Main.java b/task05/src/com/example/task05/Task05Main.java index ae31f6bc..214ce427 100644 --- a/task05/src/com/example/task05/Task05Main.java +++ b/task05/src/com/example/task05/Task05Main.java @@ -7,9 +7,10 @@ public class Task05Main { - public static void main(String[] args) { + public static void main(String[] args) + { + - /* // Random variables String randomFrom = "..."; // Некоторая случайная строка. Можете выбрать ее самостоятельно. @@ -88,7 +89,7 @@ public static void main(String[] args) { assert salaries.get(randomTo).equals(Arrays.asList(randomSalary)) : "wrong salaries mailbox content (3)"; - */ + }