java - Java、流、收集器、函数式编程:如何制作复式映射?
问题描述
我正在尝试理解流和地图。
我有一个“马”对象流。每匹“马”都有“品种”和“喜欢的食物”。
我要做的是创建一个看起来像双输入数组的东西(可能是地图),将品种放入行中,将最喜欢的食物放入列中。
在行和列的交汇处,我要数马。
要将马按品种分组,我必须这样做:
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())));
}
推荐阅读
- javascript - new Date().getTime() 在 JavaScript 中显示 NaN
- python - 在滚动视图中按下按钮以切换到另一个屏幕 [Kivy]
- react-native - 世博会弹出后反应本机问题
- sql - 查询以使用 like 运算符连接两个表
- google-chrome-extension - 替换页面上的文本值或显示与网站上显示的 id 匹配的值的叠加层
- python - RandomizedSearchCV Pipeline 使用mutual_info_classif 选择SelectPercentile 的超参数
- c# - 如何使用 Android 的统一从 URL 加载 JSON?
- c++ - Stack - 符号余额检查器
- types - SML 数据类型匹配冗余产生冗余
- excel - VBA向下查找列以查找特定条件,然后在满足条件单元格后求和单元格