본문 바로가기

Java

스트림 중간연산

출처 - Java의 정석 기초편 (남궁 성)

 

 

1. 스트림 중간연산

- 핵심: map(), flatMap()

 

Stream<T> distinct() // 중복 제거
Stream<T> filter(Predicate<T> predicate) // 조건에 안 맞는 요소 제외
Stream<T> limit(long maxSize) // 자르기
Stream<T> skip(long n) // 건너 뜀
Stream<T> peek(Comparator<T> action) // 잘 처리되었는지 중간 확인
Strear<T> sorted() // 정렬
Stream<T> sorted(Comparator<T> comparator)
Stream<R> map(Function<T,R> mapper) // 변환
Stream<R> flatMap(Function<T,Stream<R>> mapper)

 

 

2. skip(), limit()

- 스트림 건너 뛰기, 자르기

- 기본형 스트림에도 정의

 

IntStream intStream = IntStream.rangeClosed(1, 10) // 1,2,3,4,5,6,7,8,9,10
intStream.skip(3).limit(5).forEach(System.out::print); // 45678

 

 

3. filter(), distinct()

- 스트림 요소 걸러내기, 중복 제거

 

IntStream intstrea = IntStream.rangeClosed(1, 10); // 1~10
intStream.filter(i->i%2==2).filter(i->i%3!=0)forEach(System.out::print); // 24810

IntStream intStream = Intstream.of(1, 2, 2, 3, 3, 3);
intStream.distict().forEach(System.out::print); // 123

 

 

4. sorted()

- 스트림 정렬(정렬대상, 기준)

 

Stream<String> strStream = Stream.of("dd","aaa","CC","cc","b");
strStream.sorted().forEach(System.out::print); // CCaabccdd

 

 

5. Comparator의 메서드

- 정렬 기준 제공: comparing()

- 정렬 기준 추가: theComparing()

 

studentStream.sorted(Comparator.comparing(Stutent::getban)
                               .thencomparing(Student::getTotalScore)
                               .thencomparing(Student::getName))
                               .forEach(System.out::println);

 

 

6. map()

- 스트림 요소 변환

 

Stream<File> fileStream = Stream.of(new File("Ex1.java"), new File("Ex2.java");
Stream<String> filenameStream = fileStream.map(File::getName);

 

 

7. peek()

- 스트림 요소를 소비하지 않고 엿보기

 

fileStream.map(file::getName)
    .filter(s->s.indexOf('.')!=-1) // 확장자 없는 것 제외
    .peek(s->System.out.printf("filename=%s%n", s))
    .forEach(system.out::println);

 

 

8. flatMap()

- 스트림의 스트림을 스트림으로 변환

 

Stream<String[]> strArrstrm = Stream.of(new String[] {"abc", "def"}, new String[] {"ABC, GHI"});

Stream<Stream<String>> strStrStrm = strArrStrm.map(Array::stream); // 스트림의 스트림
Stream<String> strStrm = strArrStrm.flatMap(Array::stream); // 스트림

 

 

 

'Java' 카테고리의 다른 글

스트림 최종연산  (0) 2022.12.22
Optional<T>객체  (0) 2022.12.14
스트림(Stream)  (0) 2022.12.09
람다, 함수형 인터페이스, 메서드 참조  (0) 2022.12.08
쓰레드 메서드  (0) 2022.11.19