본문 바로가기
IT 정보/Java

[Java] 스트림 (Stream) 중간 연산 (intermediate operation)

by 동그리가조아 2022. 5. 27.
반응형

중간 연산 : 스트림을 반환하기 때문에 연속해서 수행할 수 있다.

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

스트림 필터링 Filter ( ), distinct ( ) 

Filter() :
  1. Stream에서 조건에 맞는 데이터만을 정제하여 더 작은 컬렉션을 만들어 낸다.
  2. filter() 메서드에서는 매개 값으로 조건(Predicate)이 주어지고, 조건이 참이 되는 요소만 필터링한다.
        IntStream stream1 = IntStream.of(7, 5, 5, 2, 1, 2, 3, 5, 4, 6);
 ex). stream2.filter(n -> n % 2!= 0).forEach(e -> System.out.print(e + " ")); // 홀수 골라내기  // 7,5,5,1,3,5

distinct() : Stream의 요소들에 중복된 데이터가 존재하는 경우, 중복을 제거하기 위해 사용한다.
       IntStream stream2 = IntStream.of(7, 5, 5, 2, 1, 2, 3, 5, 4, 6);
ex). stream1.distinct().forEach(e -> System.out.print(e + " ")); // 중복된 요소 제거 // 7,5,2,1,3,4,6

 

스트림 변환 map ( ), flatMap ( )

map() :
 1. map은 기존 Stream요소들을 주어진 함수에 전달하여, 그 반환 값들로 구성된 새로운 Stream을 형성하는 연산
      ex). String요소를 갖는 Stream을 모두 대문자로 바꿀 때 
      ex). stream.map(s->s.length()).forEach(System.out::println); // 해당 요소들의 길이 값으로 반환.
flatMap() :
1. map()과 유사하다. 스트림 요소가 만약 배열이라면 flatMap을 사용하여 배열의 각 요소의 반환값을 하나로 합친 스트림을 얻을 수 있다. 

 

스트림 제한 limit ( ),skip ( )

limit() :
 1. limit() 메서드는 해당 스트림의 첫 번째 요소부터 전달된 개수만큼의 요소만으로 이루어진 새로운 스트림을 반환
  ex). stream.limit(4).forEach(n-> System.out.print(n + " ")) // 0~ 10까지 스트림이라 했을 때 0,1,2,3 출력
skip() :
 1. skip() 메서드는 첫 번째 요소부터 전달될 개수만큼의 요소를 제외한 나머지 요소로 이루어진 새로운 스트림 반환
ex). stream.skip(4).forEach(n-> System.out.print(n + " ")) // 0~ 10까지 스트림이라 했을 때 5,6,7,8,9,10 출력

 

스트림 정렬 sorted ( )

sort() : 
 1. Stream의 요소들을 정렬하기 위해서 사용한다.
 ex). stream.sorted()forEach(n-> System.out.print(n + " ")) 오름차순
 ex). stream.sorted(Comparator.reverseOrder())forEach(n-> System.out.print(n + " ")) 
       //Comparator.reverseOrder() 를 sorted()에 넣어주면 내림차순
      

 

스트림 연산 결과 확인 peek ( )

peek() :
 1. peek() 메서드는 forEach()와 동일하게 하나씩 돌면서 출력하는 기능을 가지고 있지만, peek ( ) 메서드는 중간
    연산 메서드이고, forEach()는 최종 연산 메서드이다. 주로 연산 중간에 디버깅을 위한 메서드
    ex). stream.peek(n-> System.out.print(n + " "))
                      .skip(2)
                      .peek(n-> System.out.print(n + " "))
                      .limit(2)
                      .peek(n-> System.out.print(n + " "))

 

 

 

 



반응형