728x90
자바의 정석 챕터 14를 읽고 정리
2.2 스트림의 중간연산
스트림 자르기 - skip(), limit()
- 스트림의 일부를 잘라낼 때 사용
Stream<T> skip(long n); // 처음 n개 요소를 건너 뛴다.
Stream<T> limit(long maxSize); // 스트림의 요소를 maxSize만큼 제한한다.
IntStream skip(long n);
IntStream limit(long maxSize);
스트림의 요소 걸러내기 - filter(), distinct()
- distinct()는 중복된 요소를 제거함.
- filter()는 조건에 맞지 않는 요소를 제거함.
Stream<T> filter(Predicate<? super T> predicate);
Stream<T> distinct();
IntStream is = IntStream.of(1,2,2,3,3,3,4,4,4,5,6);
is.distinct().forEach(System.out::print); // 1,2,3,4,5,6
IntStream is2 = IntStream.rangeClosed(1, 10); // 1~10
is2.filter(i -> i%2 == 0); // 2,4,6,8,10
정렬 - sorted()
- 스트림을 정렬할 때는 sorted()를 사용
- Comparator.naturalOrder() - 기본 정렬
- Comparator.reverseOrder() - 기본 정렬의 역순
등등..
Stream<T> sorted();
Stream<T> sorted(Comparator<? super T> comparator);
Stream<String> strStream = Stream.of("dd", "aaa", "CC", "cc", "b");
strStream.sorted().forEach(System.out::print); //CC,aaa,b,cc,dd
변환 - map()
- 스트림 요소에서 저장된 값 중에서 원하는 필드만 뽑아내거나 특정 형태로 변환할 때 사용
Stream<R> map(Function<? super T, ? extends R> mapper);
// File의 스트림에서 파일의 이름만 뽑을 때
Stream<File> fs = Stream.of(new File("example.java"), new File("example"));
Stream<String> ns = fs.map(File::getName);
ns.forEach(System.out::println); // 이름만 출력함
조회 - peek()
- 연산과 연산이 올바르게 처리되었는지 확인할 때 사용
mapToInt(), mapToLong(), mapToDouble()
- map()은 연산의 결과로 Stream<T>타입의 스트림을 반환 시 스트림의 요소를 숫자로 변환할 때 사용
flatMap() - Stream<T[]>를 Stream<T>로 변환
- 스트림의 요소가 배열이거나 map()의 연산결과가 배열인 경우 배열을 쪼개서 다루기 편하게 변경할 때 사용
Stream<String[]> strArrStrm = Stream.of(new String[]{"abc", "def"}
, new String[]{"AAA", "BBB"});
Stream<String> strStrm = strArrStrm.flatMap(Arrays::stream);
- map(), flatMap() 차이
Stream<String> - map() -> Stream<Stream<String>
Stream<String> - flatMap() -> Stream<String>
728x90
'개발 > Java & Kotlin' 카테고리의 다른 글
[Java] 람다와 스트림(5) (0) | 2022.07.04 |
---|---|
[Spring] 스프링 AOP (1) (0) | 2022.07.01 |
[Java] 람다와 스트림(3) (0) | 2022.06.30 |
[Spring] 스프링 DI (2) (0) | 2022.06.29 |
[Spring] 스프링 DI (1) (0) | 2022.06.29 |