새소식

Java

[JAVA] 스트림 03

  • -

스트림의 중개 연산

 

스트림 생성으로 만든 스트림은 중개연산을 통해 다른 스트림으로 변환된다

중개연산은 스트림을 받아 스트림을 반환하기에 연속으로 사용할 수 있다.

중개연산은 filter-map 기반의 API를 사용함으로 지연연산을 통해 성능을 최적화 할 수 있다.

 

1. 스트림 필터링

filter() : 해당 조건에 맞는 새로운 스트림 반환

distinct() : 중복된 요소가 제거된 새로운 스트림 반환

IntStream iStream_1 = IntStream.of(1, 1, 2, 2, 3, 3, 4, 4, 5, 5);
IntStream iStream_2 = IntStream.of(1, 1, 2, 2, 3, 3, 4, 4, 5, 5);

iStream_1.filter(n -> n%2 == 0).forEach(System.out::println);
iStream_2.distinct().forEach(System.out::println);

2. 스트림 변환

map() : 스트림의 요소들을 주어진 함수에 전달해 함수의 결과값으로 이루어진 새로운 스트림을 반환

flatMap() : 해당 스트림의 요소가 배열일 경우 각 배열의 요소를 하나로 합친 새로운 스트림을 반환

Stream<String> stream_1 = Stream.of("Time", "to", "lazy");
Stream<String> stream_2 = Arrays.stream(new String[]{"Time", "to", "lazy"});

stream_1.map(s -> s).forEach(System.out::println);
stream_2.flatMap(s->Stream.of(s)).forEach(System.out::println);

3. 스트림 제한

limit() : 스트림의 처음부터 매개변수로 입력된 개수만큼으로 이루어진 새로운 스트림 반환

skip(): 스트림의 처음부터 매개변수로 입력된 개수만큼을 제외한 새로운 스트림을 반환

IntStream iStream_1 = IntStream.rangeClosed(1, 20);
IntStream iStream_2 = IntStream.rangeClosed(1, 20);

iStream_1.limit(10).forEach(e -> System.out.print(e+" "));
iStream_2.skip(10).forEach(e -> System.out.print(e+" "));

4. 스트림 정렬

sorted(): 해당 스트림을 매개변수로 전달된 Comparator를 사용해 정렬한다

            전달된 Comparator가 없다면 사전순으로 정렬한다

new Random().ints().limit(5).sorted().forEach(System.out::println);
new Random().ints().limit(5).boxed().sorted(Comparator.reverseOrder()).forEach(System.out::println);

5. 스트림 연산 결과 확인

peek(): 결과 스트림으로부터 요소를 소모하여 추가로 명시된 동작을 수행

          해당 메소드는 원본 스트림요소를 소모하지 않으므로 주로 연산 도중 결과를 확인하는 용도로 사용. (디버깅)

iStream.peek(s -> System.out.println("원본 스트림 : "+s))
.skip(2)
.peek(s -> System.out.println("스킵 실행후 : "+s))
.forEach(n -> System.out.println(n));

출처 : tcpschool.com/

'Java' 카테고리의 다른 글

문자열 - 바이트 배열 변환  (0) 2021.11.01
Map 출력방법 정리  (0) 2021.09.28
[JAVA] 스트림 01  (0) 2021.03.09
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.