티스토리 뷰
728x90
반응형
분할
- Predicate를 분류 함수로 사용하는 특수한 그룹화 기능
- 분할 함수는 boolean을 반환하므로 Map의 키 형식은 Boolean
Map<Boolean, List<Dish>> partitionedMenu = menu.stream().collect(partitionBy(Dish::isVegetarian);
//{false=[pork, beef, chicken, prawns, salmon], true=[french fries, rice, season fruit, pizza]}
List<Dish> vegetarianDishes = partitionedMenu.get(true); //채식 요리
List<Dish> vegetarianDishes = menu.stream().filter(Dish::isVegetarian).collect(toList()); //동일
분할의 장점
- 분할 함수가 반환하는 참, 거짓 두가지 요소의 스트림 리스트를 모두 유지함
- 컬렉터를 두번째 인수로 전달 가능
Map<Boolean, Map<Dish.Type, List<Dish>> vegetarianDishesByType = menu.stream().collect(
partitioningBy(Dish::isVegetarian, //분할 함수
groupingBy(Dish::getType))); //두번째 컬렉터
//{false=[FISH=[prawns, salmon], MEAT=[pork, beef, chicken]}, true={OTHER=[french fries, rice, season fruit]}}
Map<Boolean, Dish> mostCaloricPartitionByVegetarian = menu.stream().collect(
partitioningBy(Dish::isVegetarian,
collectingAndThen(maxBy(comparingInt(Dish::getCalories)), //각 그룹에서 가장 칼로리가 높은 요리
Optional::get)));
//{false=pork, true=pizza}
728x90
반응형
'Java' 카테고리의 다른 글
[Java] JSON 변환 net.sf.json-lib (0) | 2023.08.18 |
---|---|
[Java] Stream 병렬 데이터 처리와 성능 (0) | 2023.08.15 |
[Java] 스트림으로 데이터 수집 - 그룹화 (0) | 2023.08.05 |
[Java] 스트림으로 데이터 수집 - 요약 연산 (0) | 2023.08.05 |
[Java] Stream (0) | 2023.07.31 |
반응형
300x250