我正在尝试了解流和地图。
我有一个“马”对象流。每个“马”都有一个“品种”和一个“喜爱的食物”。
我想做的是创建一个看起来像双重入口数组的东西(可能是一张地图),将品种排成行,将喜欢的食物排成列。
在行和列的交点,我要计算马匹的数量。
要将马按品种分组,我必须这样做:
Map<Breed, List<Horse>> map = horsesStream.collect(Collectors.groupingBy(h -> h.breed));
要让马按喜爱的食物分组,几乎是一样的事情:
Map<FavoriteFood, List<Horse>> map = horsesStream.collect(Collectors.groupingBy(h -> h.favoriteFood));
并将计数按食物分组,我这样做:
Map<Food, Long> map = horsesStream.collect(Collectors.groupingBy((h-> h.favoriteFood), Collectors.counting());
我怎样才能将这三个结合起来?
我试过了 :
Map<Breed, Map<Food, List<Horse>>> map=
horsesStream.collect(Collectors.groupingBy((h -> h.breed), Collectors.groupingBy(h-> h.favoriteFood)));
但是现在,我根本不知道该怎么办。
你能帮助我吗 ?也许有些线索?
正确的答案是:
Map<Breed, Map<Food, Long>> map = horsesStream.collect(Collectors.groupingBy((c -> c.breed),
Collectors.groupingBy(c -> c.favoriteFood, Collectors.counting())));
谢谢你,扫地机
最佳答案
解决方案:
解决方案是:
public static Map<Breed, Map<Food, Long>> breedFoodCount (List<Horse> horses){
// Get a stream
Stream<Horse> horsesStream = horses.stream();
return horsesStream.collect(Collectors.groupingBy((c -> c.breed),
Collectors.groupingBy(c -> c.favoriteFood, Collectors.counting())));
}