gpt4 book ai didi

Java、流、收集器、函数式编程 : How to make a double entry map?

转载 作者:行者123 更新时间:2023-12-01 16:26:18 24 4
gpt4 key购买 nike

我正在尝试理解流和 map 。

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

我想做的是创建一个看起来像双条目数组的东西(可能是 map ),将品种放入行中,将最喜欢的食物放入列中。

在行和列的交叉点,我想数一下马的数量。

要按品种对马进行分组,我必须这样做:

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

关于Java、流、收集器、函数式编程 : How to make a double entry map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62136646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com