我正在尝试了解流和地图。

我有一个“马”对象流。每个“马”都有一个“品种”和一个“喜爱的食物”。

我想做的是创建一个看起来像双重入口数组的东西(可能是一张地图),将品种排成行,将喜欢的食物排成列。

在行和列的交点,我要计算马匹的数量。

要将马按品种分组,我必须这样做:

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

08-18 02:17