스트림의 중간연산

 

✔ 스트림 자르기 - skip(), limit()

 

✔ 스트림의 요소 걸러내기- filter(), distinct()

중간연산이므로 filter()를 여러번 사용 가능

 

✔ 스트림 정렬하기 - sorted()

👉 정렬할때 필요한 것: 1. 정렬 대상. 2. 정렬 기준

정렬 요소 유무에 따라 써야하는 sortd()가 달라짐
CASE_INSENTIVE_ORDER.reversed()에서 대문자가 먼저 출력됨

static Comparator<String> CASE_INSENSITIVE_ORDER = new CaseInsensitiveComparator();
// 자주사용하므로 comparator에서 아예 만들어서 갖고 있음

 

 

 

✔ Comparator의 comparing()으로 정렬기준을 제공

comparing(Function<T,U> keyExtractor)
comparing(Functino<T,U> keyExtractor, Comparator<U> keyComparator)

studentStream.sorted(Comparator.comparing(Student::getBan))//반별로 정렬.(Student s)->s.getBan()
					.forEach(System.out::println);

 

✔ 추가정렬기준을 제공할 때는 thenComparing()을 사용 (정렬기준이 여러개일때)

thenComparing(Comparator<T> other)
thenComparing(Function <T, U> keyExtractor)
thenComparing(Function <T, U> keyExtractor, Comparator<U> keyComp)

studentStream.sorted(Comparator.comparing(Student::getBan) // 반별로 정렬
					.thenComparing(Student::getTotalScore) // 총점별로 정렬
                    .thenComparing(Student::getName)	// 이름별로 정렬
                    .forEach(System.out::println);

 

 

✔ 스트림의 요소 변환 - map()

: <T> 타입의 스트림이 <R> 타입의 스트림으로 변환

file객체에서 file이름만 뽑아서 Stream으로 만드는 것

 

 

 

✔ 스트림의 요소를 소비하지 않고 엿보기 - peek()

: forEach()와 유사. 얘는 최종연산에 사용하고 peek()는 중간연산에서 사용하기 때문에 반환값이 다름

: 중간 작업결과 확인 용도 (디버깅 용도)

 

 

 

✔ 스트림의 스트림을 스트림으로 변환 - flatMap()

스트림의 스트림으로 변환

👉 스트림의 스트링으로 "문자열"을 하나씩 스트링 값에 넣고 싶은데 map을 사용하면 스트림의 스트림<String>으로 변환됨

👉 이럴때는 map이 아닌 flatMap사용

 

 

 

 

 

 

+ Recent posts