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