Stream multigrouping

initial data

public class DataDemo {

    public enum CaloriesType {LOW, NORMAL, HIGH};

    public static List<Dish> menu = Arrays.asList(
            new Dish("pork", false, 800, Dish.Type.MEAT)
            , new Dish("beef", false, 700, Dish.Type.MEAT)
            , new Dish("chicken", false, 400, Dish.Type.MEAT)
            , new Dish("french fries", true, 530, Dish.Type.OTHER)
            , new Dish("rice", true, 350, Dish.Type.OTHER)
            , new Dish("season fruit", true, 120, Dish.Type.OTHER)
            , new Dish("pizza", true, 550, Dish.Type.OTHER)
            , new Dish("prawns", false, 300, Dish.Type.FISH)
            , new Dish("prawns", false, 300, Dish.Type.FISH)
            , new Dish("salmon", false, 450, Dish.Type.FISH) );

}

domain

static void multilevelGrouping(){
        Map<Dish.Type, Map<Dish.CaloriesType, List<Dish>>> map = DataDemo.menu.stream()
                .collect(groupingBy(Dish::getType,
                        groupingBy(
                                dish -> {
                                    if(dish.getCalories() < 400)return Dish.CaloriesType.LOW;
                                    else if(dish.getCalories() < 700) return Dish.CaloriesType.NORMAL;
                                    else return Dish.CaloriesType.HIGH;
                                })));
        System.out.println(map);
    }在这里插入代码片

多级分组

static void multilevelGrouping(){
        Map<Dish.Type, Map<Dish.CaloriesType, List<Dish>>> map = DataDemo.menu.stream()
                .collect(groupingBy(Dish::getType,
                        groupingBy(
                                dish -> {
                                    if(dish.getCalories() < 400)return Dish.CaloriesType.LOW;
                                    else if(dish.getCalories() < 700) return Dish.CaloriesType.NORMAL;
                                    else return Dish.CaloriesType.HIGH;
                                })));
        System.out.println(map);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值