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())));
谢谢你,清洁工
# 1 楼答案
解决方案:
解决方案是: