diff --git a/task01/README.md b/task01/README.md index b6d08b94..1aff58f4 100644 --- a/task01/README.md +++ b/task01/README.md @@ -1,7 +1,7 @@ # Задание 01 ternaryOperator Давайте научимся комбинировать функции в более сложные функции. -Для примера построим следующую комбинацию. +Для примера построим следующую комбинацию. Дан предикат condition и две функции ifTrue и ifFalse. Напишите метод ternaryOperator, который из них построит новую функцию, возвращающую значение функции ifTrue, если предикат выполнен, и значение ifFalse иначе. diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index de4599c1..de5049af 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); - */ + } @@ -22,8 +23,9 @@ public static Function ternaryOperator( Predicate condition, 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..2af8e962 100644 --- a/task02/src/com/example/task02/Task02Main.java +++ b/task02/src/com/example/task02/Task02Main.java @@ -6,17 +6,21 @@ 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 < 1 || n > 16) + throw new IllegalArgumentException(); + return IntStream.iterate(0, a -> { + a++; + return (int) (a % Math.pow(2, n)); + }).map(a -> a ^ (a >> 1)); // your implementation here } diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 254d5cb0..b0accc57 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; @@ -21,7 +22,20 @@ public static void findMinMax( Stream stream, 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,max)>0) + max = currentElement; + if (order.compare(currentElement,min)<0) + min = 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..50b807f4 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/InfoKeeper.java b/task05/src/com/example/task05/InfoKeeper.java new file mode 100644 index 00000000..42816073 --- /dev/null +++ b/task05/src/com/example/task05/InfoKeeper.java @@ -0,0 +1,15 @@ +package com.example.task05; + +public class InfoKeeper { + private String from; + private String to; + private T content; + public InfoKeeper(String from, String to, T content) { + this.from = from; + this.to = to; + this.content = content; + } + public String getFrom () { return from; } + public String getTo () { return to; } + public T getContent () { return content; } +} diff --git a/task05/src/com/example/task05/MailMessage.java b/task05/src/com/example/task05/MailMessage.java new file mode 100644 index 00000000..442427dd --- /dev/null +++ b/task05/src/com/example/task05/MailMessage.java @@ -0,0 +1,7 @@ +package com.example.task05; + +public class MailMessage extends InfoKeeper{ + public MailMessage(String to, String from, String content){ + super(to, from, 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..aabb6ee9 --- /dev/null +++ b/task05/src/com/example/task05/MailService.java @@ -0,0 +1,28 @@ +package com.example.task05; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; +public class MailService implements Consumer> { + private final Map> MailBox = new HashMap>(){ + @Override + public List get(Object key) { + List list = super.get(key); + return list != null ? list : new ArrayList<>(); + } + }; + public Map> getMailBox() { + return MailBox; + } + @Override + public void accept(InfoKeeper tInfoKeeper) { + if (MailBox.containsKey(tInfoKeeper.getTo())) { + MailBox.get(tInfoKeeper.getTo()).add(tInfoKeeper.getContent()); + } else { + ArrayList arrayList = new ArrayList<>(); + arrayList.add(tInfoKeeper.getContent()); + MailBox.put(tInfoKeeper.getTo(), arrayList); + } + } +} diff --git a/task05/src/com/example/task05/Salary.java b/task05/src/com/example/task05/Salary.java new file mode 100644 index 00000000..48d56747 --- /dev/null +++ b/task05/src/com/example/task05/Salary.java @@ -0,0 +1,7 @@ +package com.example.task05; + +public class Salary extends InfoKeeper{ + public Salary(String from, String to, Integer content) { + super(from, to, content); + } +} 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)"; - */ + }