스트림 API에 의해 생성된 초기 스트림은 중개 연산을 통해 또 다른 스트림으로 변환됩니다.
filter()메서드는 해당 스트림에서 주어진 조건에 맞는 요소만으로 구성된 새로운 스트림을 반환합니다.
distinct()메서드는 해당 스트림에서 중복된 요소가 제거된 새로운 스트림을 반환합니다.
-distinct()메서드는 내부적으로 Object 클래스의 equals()메서드를 사용하여 중복을 비교합니다.
IntStream stream1 = IntStream.of(7,5,5,2,1,2,3,5,2,6);
IntStream stream2 = IntStream.of(7,5,5,2,1,2,3,5,2,6);
// 스트림에서 중복된 요소를 제거함.
stream1.distinct().forEach(e -> System.out.print(e + " "));
System.out.println();
// 스트림에서 홀수만을 골라냄.
stream2.filter(n -> n % 2 != 0).forEach(e -> System.out.print(e + " "));
//문자열로 이루어진 스트림을 map()메서드를 이용하여 각 문자열의 길이로 이루어진 스트림으로 변환
Stream<String> stream = Stream.of("HTML", "CSS", "JAVA", "JAVASCRIPT");
stream.map(s -> s.length()).forEach(e -> System.out.println(e));
//4 3 4 10
//여러 문자열이 저장된 배열을 각 문자열에 포함된 단어로 이루어진 스트림으로 변환
String[] arr = {"I study hard", "You study JAVA", "I am hungry"};
Stream<String> stream = Arrays.stream(arr);
stream.flatMap(s -> Stream.of(s.split(" +"))).forEach(System.out::println);
limit() 메소드는 해당 스트림의 첫 번째 요소부터 전달된 개수만큼의 요소만으로 이루어진 새로운 스트림을 반환합니다.( limit(n)이면 n번째까지만 출력한다.)
skip() 메소드는 해당 스트림의 첫 번째 요소부터 전달된 개수만큼의 요소를 제외한 나머지 요소만으로 이루어진 새로운 스트림을 반환합니다.
IntStream stream1 = IntStream.range(0, 10);
IntStream stream2 = IntStream.range(0, 10);
IntStream stream3 = IntStream.range(0, 10);
stream1.skip(4).forEach(n -> System.out.print(n + " "));
System.out.println();
stream2.limit(5).forEach(n -> System.out.print(n + " "));
System.out.println();
stream3.skip(3).limit(5).forEach(n -> System.out.print(n + " "));
// 4 5 6 7 8 9
// 0 1 2 3 4
// 3 4 5 6 7
Stream<String> stream1 = Stream.of("JAVA", "HTML", "JAVASCRIPT", "CSS");
Stream<String> stream2 = Stream.of("JAVA", "HTML", "JAVASCRIPT", "CSS");
stream1.sorted().forEach(s -> System.out.print(s + " "));
System.out.println();
stream2.sorted(Comparator.reverseOrder()).forEach(s -> System.out.print(s + " "));
// CSS HTML JAVA JAVASCRIPT
// JAVASCRIPT JAVA HTML CSS