package com.levelup.java.util.stream; import static org.hamcrest.collection.IsIterableContainingInOrder.contains; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; import org.junit.Test; /** * This java example will demonstrate stream * intermediate examples. * * @author Justin Musgrove * @see <a href='http://www.leveluplunch.com/java/examples/stream-intermediate-operations-example/'>Stream intermediate operations</a> */ public class StreamIntermediateExample { @Test public void intermediate_filter() { long elementsLessThanThree = Stream.of(1, 2, 3, 4) .filter(p -> p.intValue() < 3).count(); assertEquals(2, elementsLessThanThree); } @Test public void intermediate_map() { List<String> strings = Stream.of("one", null, "three").map(s -> { if (s == null) return "[unknown]"; else return s; }).collect(Collectors.toList()); assertThat(strings, contains("one", "[unknown]", "three")); } @Test public void intermediate_flatmap() { // see CountWordOccurrencesInFile.java } @Test public void intermediate_peek() { List<String> strings = Stream.of("Badgers", "finals", "four") .filter(s -> s.length() >= 4).peek(s -> System.out.println(s)) .map(s -> s.toUpperCase()).collect(Collectors.toList()); assertThat(strings, contains("BADGERS", "FINALS", "FOUR")); } @Test public void intermediate_distinct() { List<Integer> distinctIntegers = IntStream.of(5, 6, 6, 6, 3, 2, 2) .distinct().boxed().collect(Collectors.toList()); assertEquals(4, distinctIntegers.size()); assertThat(distinctIntegers, contains(5, 6, 3, 2)); } @Test public void intermediate_sorted() { List<Integer> sortedNumbers = Stream.of(5, 3, 1, 3, 6).sorted() .collect(Collectors.toList()); assertThat(sortedNumbers, contains(1, 3, 3, 5, 6)); } @Test public void intermediate_limit() { List<String> vals = Stream.of("limit", "by", "two").limit(2) .collect(Collectors.toList()); assertThat(vals, contains("limit", "by")); } }