스트림의 중간연산
스트림 API에의해 생성된 스트림은 아래의 중간연산을 통해 다른 스트림으로 변환됩니다.
- 스트림 필터링
- 스트림 변환
- 스트림 제한
- 스트림 정렬
- 스트림 연산 결과 확인
1. 스트림 필터링
스트림에서 중복된 요소를 제거하거나 조건에 맞지 않는 요소를 걸러낸다.
filter(): 매개변수로 predicate가 필요한데 조건에 맞는 요소들로 새로운 스트림을 반환하며 필요에 따라 여러번 사용 가능하다.
IntStream stream = IntStream.range(1,11); //1 ~ 10
stream.filter(i -> i % 2 == 0).forEach(System.out::println); // 2 4 6 8 10 짝수 출력
distinct(): 스트림에서 중복된 요소 제거
IntStream stream = IntStream.of(1, 2, 2, 2, 3, 3, 4, 4, 4, 4, 5);
stream.distinct().forEach(System.out::print); //1 2 3 4 5
2. 스트림 변환
map(): 스트림의 요소 중에서 원하는 필드만 뽑아내어 새로운 스트림을 반환한다.
flatMap(): 스트림의 요소가 배열일때 각배열의 요소값의 반환값으로 새로운 스트림을 반환한다.
//map()
Stream<String> stream = Stream.of("Java", "cpp", "python", "php");
stream.map(s -> s.length)).forEach(System.out.::println); // 4 3 6 3
//flatMap()
Stream<String> stream =
Arrays.stream(new String[]{"Hello"," My name is Yang"});
stream.flatMap(s -> Stream.of(s.split(" +"))).forEach(System.out::println);
//실행결과
/*
Hello
My
name
is
yang
*/
3. 스트림 제한
limit(): 스트림의 첫 요소부터 파라미터의 개수만큼으로 이루어진 스트림 반환
skip(): 스트림의 첫 요소부터 파라미터의 개수를 건나 뛰고 나머지로 이루어진 스트림 반환
//
IntStream stream = IntStream.rangeClosed(1, 10);
stream.skip(2).limit(5).forEach(System.out::print); //34567
4. 스트림 정렬
스트림을 정렬할 때 sorted()메서드를 사용한다. 해당 스트림을 주어진 Comparator로 스트림을 정렬한다.
Comparator를 지정하지 않으면 기본 정렬 기준으로 정렬한다.
//
Stream<String> stream = Stream.of("Java", "cpp", "python", "php");
stream.sorted().forEach(System.out::println);
/* 실행결과
Java
cpp
php
python
*/
Stream<String> stream2 = Stream.of("Java", "cpp", "python", "php");
stream2.sorted(Comparator.reverseOrder()).forEach(s -> System.out.print(s + " ")); //python php cpp Java
5. 스트림 연산 결과 확인
peek(): 스트림에서 연산 사이에 결과를 확인하고싶을때 하용
IntStream stream = IntStream.of(4, 5, 3, 2, 2, 1, 7, 5, 9, 6);
stream.peek(s -> System.out.println("원본 스트림 : " + s))
.skip(5)
.peek(s -> System.out.println("skip(5) 실행 후 : " + s))
.sorted()
.peek(s -> System.out.println("sorted() 실행 후 : " + s))
.forEach(n -> System.out.println(n));
/* 실행결과
원본 스트림 : 4
원본 스트림 : 5
원본 스트림 : 3
원본 스트림 : 2
원본 스트림 : 7
원본 스트림 : 5
skip(5) 실행 후 : 5
원본 스트림 : 9
skip(5) 실행 후 : 9
원본 스트림 : 6
skip(5) 실행 후 : 6
sorted() 실행 후 : 5
5
sorted() 실행 후 : 6
6
sorted() 실행 후 : 9
9
*/'프로그래밍 > Java' 카테고리의 다른 글
| java8 - time (0) | 2020.03.10 |
|---|---|
| java8 - Optional (0) | 2020.02.23 |
| java8 변경사항 - 스트림API 최종연산 (0) | 2020.02.07 |
| Java8 변경사항 - 스트림API 특징과 생성 (0) | 2020.02.01 |
| Java8 변경사항 - 람다 표현식 (0) | 2020.01.29 |