본문 바로가기
개발/Java

[Java] 람다와 스트림(4)

by devhooney 2022. 7. 1.
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' 카테고리의 다른 글

[Java] 기본 알고리즘  (0) 2022.07.07
[Java] 람다와 스트림(5)  (0) 2022.07.04
[Java] 람다와 스트림(3)  (0) 2022.06.30
[Java] 람다와 스트림(2)  (0) 2022.06.29
[Java] 람다와 스트림(1)  (0) 2022.06.28