[Ch6] 6.3 그룹화

kkambbak1·2023년 4월 27일
0

https://github.com/BanditBool2/ReadingRecord/issues/40

  1. 클래스로도 가능합니다.
    CaloricLevel을 나타내는 클래스를 만들고 해당 클래스의 인스턴스를 사용하여 그룹화 할 수 있습니다.
    그러나 enum으로 대체하면 더 간단한 코드로 작성할 수 있습니다.
class CaloricLevel {
    private String name;

    public CaloricLevel(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

}

List<Dish> menu = ... 
Map<CaloricLevel, List<Dish>> dishesByCaloricLevel =
    menu.stream().collect(Collectors.groupingBy(dish -> new CaloricLevel(dish.getCaloricLevel().getName())));
    
  1. groupBy()메서드를 활용하는 방법

groupBy() 메서드는 특정 키를 기준으로 그룹화된 맵(Map)을 반환합니다.

Map<CaloricLevel, List<Dish>> dishesByCaloricLevel = dishes.stream()
    .collect(Collectors.groupingBy(dish -> {
        if (dish.getCalories() <= 400) {
            return CaloricLevel.DIET;
        } else if (dish.getCalories() <= 700) {
            return CaloricLevel.NORMAL;
        } else {
            return CaloricLevel.FAT;
        }
    }));

groupingBy(Dish::getType)를 사용해 그룹화를 하는 것을 보여주는 챕터였다.

다수준 그룹화

→ 2차원 맵으로 groupingBy를 2번 사용하기

컬렉터 결과를 다른 형식에 적용하기

→collectingAndThen

profile
윤성

0개의 댓글