[Java] 스트림의 중개연산

윤재열·2022년 2월 2일
0

Java

목록 보기
45/71

스트림의 중개연산(intermeditate operation)

스트림 API에 의해 생성된 초기 스트림은 중개 연산을 통해 또 다른 스트림으로 변환됩니다.

  • 이러한 중개 연산은 스트림을 전달받아 스트림을 반환하므로, 중개연산은 연속으로 연결해서 사용할 수 있습니다.
  • 스트림의 중개 연산은 필터(filter),맵(map)기반의 API를 사용함으로 지연(lazy)연산을 통해 성능을 최적화할 수 있습니다.

스트림API에서 사용할 수 있는 대표적인 중개연산과 그에 따른 메서드

  • 스트림 필터링 : filter(), distinct()
  • 스트림 변환 : map(), flatmap()
  • 스트림 제한 : limit(), skip()
  • 스트림 정렬 : sorted()
  • 스트림 연산 결과 확인 : peek()

스트림 필터링

  • 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()메서드는 해당 스트림의 요소들을 주어진 함수에 인수로 전달하여, 그 반환값들로 이루어진 새로운 스트림을 반환합니다.
  • 만약 해당 스트림의 요소가 배열이라면,flatMap()메서드를 사용하여 각 배열의 요소의 반환값을 하나로 합친 새로운 스트림을 얻을 수 있습니다.
//문자열로 이루어진 스트림을 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

스트림 정렬

  • sorted() 메소드는 해당 스트림을 주어진 비교자(comparator)를 이용하여 정렬합니다.
    이때 비교자를 전달하지 않으면 기본적으로 사전 편찬 순(natural order)으로 정렬하게 됩니다.
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 
profile
블로그 이전합니다! https://jyyoun1022.tistory.com/

0개의 댓글