Stream Demo03(reduce, reducing and group)

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);
    }
發佈了34 篇原創文章 · 獲贊 0 · 訪問量 2074
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章