Stream Demo03(reduce, reducing and group)

本文介绍了一种使用Java Stream API处理菜单数据的方法,包括计算总热量、收集菜品名称、按类型分组以及按热量范围分组。展示了如何利用reduce、collect和groupingBy等操作简化复杂的数据处理流程。
摘要由CSDN通过智能技术生成

Prepared Data:

    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) );

}
public class Dish {
    public Dish(String name, boolean vegetarian, int calories, Type type) {
        this.name = name;
        this.vegetarian = vegetarian;
        this.calories = calories;
        this.type = type;
    }

    public String getName() {
        return name;
    }


    public int getCalories() {
        return calories;
    }

    public boolean isVegetarian() {
        return vegetarian;
    }

    public Type getType() {
        return type;
    }

    private final String name;

    private final boolean vegetarian;

    private final int calories;

    private final Type type;


    public enum Type {MEAT, FISH, OTHER}
}

sum (reduce)

static void sumReducing(){
        Optional<Integer> sum = DataDemo.menu.stream()
                .map(dish -> dish.getCalories())
                .reduce(Integer::sum);
        System.out.println(sum.get());
    }

sum(mapToInt)

static void sumReducing(){
        Optional<Integer> sum = DataDemo.menu.stream()
                .map(dish -> dish.getCalories())
                .reduce(Integer::sum);
        System.out.println(sum.get());
    }

append string(reducing)

    static void collectReducing(){
        String menuShortName = DataDemo.menu.stream()
                .map(Dish::getName)
                .collect(reducing((c1, c2) -> c1+c2)).get();
        System.out.println(menuShortName);
    }

append string(reducing2)

    static void reducing3Params(){
        String nameForShort = DataDemo.menu.stream()
                .collect(reducing("", Dish::getName, (name1, name2) -> name1+name2));
        System.out.println(nameForShort);
    }

group

    static void collectGroup(){
        Map<Dish.Type, List<Dish>> map = DataDemo.menu.stream()
                .collect(groupingBy(Dish::getType));
    }

group2

    private enum CaloriesType {LOW, NORMAL, HIGH};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值