@Test public void _03_filter() { Stream<String> longWords = words.stream().filter(w -> w.length() > 12); Optional<String> first = longWords.findFirst(); assertThat(first.isPresent(), is(true)); assertThat(first.get(), is("conversations")); }
@Test public void shouldFindFirst() { Stream<Fruit> fruits = asList(new Fruit(APPLE), new Fruit(GRAPE)).stream(); Optional<Fruit> first = fruits.findFirst(); if (first.isPresent()) { Fruit firstFruit = first.get(); assertThat(firstFruit.getName()).isEqualTo(APPLE); } else fail("should've find apple."); }
@Test public void _04_서브스트림_추출() { // limit Stream<Double> randoms = Stream.generate(Math::random).limit(100); assertThat(randoms.count(), is(100L)); // skip Stream<String> words = Stream.of(contents.split("[\\P{L}]+")).skip(1); assertThat(words.findFirst().get(), is("was")); }
@Test public void _05_상태유지변환_StatefulTransformation() { // distinct는 이전 값을 기억하고 있어야 한다. Stream<String> uniqueWords = Stream.of("merrily", "merrily", "merrily", "gently", "merrily").distinct(); final List<String> actual = uniqueWords.collect(Collectors.toList()); assertThat(actual.get(0), is("merrily")); assertThat(actual.get(1), is("gently")); // sort도 이전 값을 기억하고 있어야한다. (전체 값을 다 알고 있어야..) Stream<String> longestFirst = words.stream().sorted(Comparator.comparing(String::length).reversed()); final Optional<String> longestFirstFirst = longestFirst.findFirst(); assertThat(longestFirstFirst.get(), is("disappointment")); }