Stream Subgroup

Domain Object

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}
}

Initial Data

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

Collecting Data In Subgroups

Counting In Subgroups

void subGroup(){
        Map<Dish.Type, Long> map
                = menu.stream().collect(groupingBy(Dish::getType,
                counting()));
    }

Max in Subgroups

void groupThenMax(){
        Map<Dish.Type, Optional<Dish>> map
                = menu.stream().collect(groupingBy(Dish::getType
                , maxBy(Comparator.comparingInt(Dish::getCalories))));
    }

Adapting the Collector Result to a Different Type

void groupMaxThenChangeResult(){
        Map<Dish.Type, Dish> map = menu.stream().collect(groupingBy(Dish::getType,
                collectingAndThen(maxBy(Comparator.comparingInt(Dish::getCalories)),
                        Optional::get)
                ));
    }

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章