From bb4a3b1ac918a88812fdca8c615288e0b2209a2d Mon Sep 17 00:00:00 2001 From: elefus Date: Thu, 11 Oct 2018 13:06:39 +0300 Subject: [PATCH 1/2] Homework streams.part2.exercise3 --- .../streams/part2/exercise/Exercise3.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/test/java/streams/part2/exercise/Exercise3.java diff --git a/src/test/java/streams/part2/exercise/Exercise3.java b/src/test/java/streams/part2/exercise/Exercise3.java new file mode 100644 index 0000000..8bd4b80 --- /dev/null +++ b/src/test/java/streams/part2/exercise/Exercise3.java @@ -0,0 +1,28 @@ +package streams.part2.exercise; + +import org.junit.jupiter.api.Test; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; + +@SuppressWarnings({"unused", "ConstantConditions"}) +class Exercise3 { + + @Test + void createLimitedStringWithOddNumbersSeparatedBySpaces() { + int countNumbers = 10; + + String result = null; + + assertThat(result, is("1 3 5 7 9 11 13 15 17 19")); + } + + @Test + void extractEvenNumberedCharactersToNewString() { + String source = "abcdefghijklm"; + + String result = null; + + assertThat(result, is("acegikm")); + } +} From 22fa4de415a5e7857308e0272bbe9574bc3fced7 Mon Sep 17 00:00:00 2001 From: Konstantin Romanov Date: Thu, 25 Oct 2018 12:30:28 +0300 Subject: [PATCH 2/2] Streams part 2 exercise 3 has done --- .../streams/part2/exercise/Exercise3.java | 66 ++++++++++++++++++- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/src/test/java/streams/part2/exercise/Exercise3.java b/src/test/java/streams/part2/exercise/Exercise3.java index 8bd4b80..2871a68 100644 --- a/src/test/java/streams/part2/exercise/Exercise3.java +++ b/src/test/java/streams/part2/exercise/Exercise3.java @@ -2,6 +2,17 @@ import org.junit.jupiter.api.Test; +import java.util.HashSet; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.Collector; +import java.util.stream.Stream; + +import static java.util.stream.Collectors.joining; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; @@ -12,7 +23,11 @@ class Exercise3 { void createLimitedStringWithOddNumbersSeparatedBySpaces() { int countNumbers = 10; - String result = null; + String result = Stream.iterate(1, i -> i + 1) + .filter(isOddNumber()) + .limit(countNumbers) + .map(String::valueOf) + .collect(joining(" ")); assertThat(result, is("1 3 5 7 9 11 13 15 17 19")); } @@ -21,8 +36,55 @@ void createLimitedStringWithOddNumbersSeparatedBySpaces() { void extractEvenNumberedCharactersToNewString() { String source = "abcdefghijklm"; - String result = null; + String result = Stream.iterate(0, i -> i + 1) + .limit(source.length()) + .filter(isEvenNumber()) + .map(source::charAt) + .collect(new CharJoining()); assertThat(result, is("acegikm")); } + + private static class CharJoining implements Collector { + + private HashSet characteristics; + + public CharJoining() { + characteristics = new HashSet<>(); + characteristics.add(Characteristics.CONCURRENT); + } + + @Override + public Supplier supplier() { + return StringBuffer::new; + } + + @Override + public BiConsumer accumulator() { + return StringBuffer::append; + } + + @Override + public BinaryOperator combiner() { + return StringBuffer::append; + } + + @Override + public Function finisher() { + return StringBuffer::toString; + } + + @Override + public Set characteristics() { + return characteristics; + } + } + + private static Predicate isOddNumber() { + return n -> n % 2 == 1; + } + + private static Predicate isEvenNumber() { + return n -> n % 2 == 0; + } }