假设我有一个walls列表listOfWalls,并且每个wall对象具有以下层次结构:
wall -> wallType -> wallEntry(list of wall materials ) -> wallMaterial -> wallMaterialType(enum type),
所以为了在这个列表中获得一些墙的wallMaterialType,我会这样做
wall.getWallType().getWallEntry().getWallMaterial().getWallMaterialType();
BRICK: 35 square meters.
Plaster: 140 square meters.
Wood: 35 square meters.
Hay: 105 square meters.
Map<WallType, Double> getIt = listOfWalls.stream()
.collect(groupingBy(Wall::getWallType, Collectors.summingDouble(Wall::getWallArea)));
从那里我不知道该怎么走?感谢帮助。
您似乎希望通过WallMaterialType
枚举进行映射。
Map<WallMaterialType, Double> result = walls.stream()
.flatMap(wall -> wall.getWallType().getWallEntry().getWallMaterials()
.stream()
.map(wallMaterial -> new AbstractMap.SimpleEntry<>(wallMaterial.getWallMaterialType(),
wall.getWallArea())))
.collect(Collectors.groupingBy(AbstractMap.SimpleEntry::getKey,
Collectors.summingDouble(AbstractMap.SimpleEntry::getValue)));
如果您一直调用map(..)
并到达WallMaterials,您将丢失墙的Wallare
。因此,我将所有内容分组到一个Flatmap
步骤中,以返回墙材料类型和墙面积的映射(简单对也可以)。
(FlatMap
步骤返回WallMaterialType
和WallMaterialType
所属的WallArea
的简单映射)。
收藏品与你已经写的相似。
问题内容: 我的清单包含大小等的集合。我尝试这样做,但似乎不起作用。 我想要的最终结果是。 我可以尝试添加在所有的元素和那种出来再做出新的的。但是,有某种班轮吗? 更新: 这可行,但是可以简化吗? 问题答案: @Eugene的回答很甜蜜,因为番石榴很甜。但是,如果您碰巧在类路径中没有番石榴,这是另一种方式: 首先,我将所有集合映射到一个流中,然后对所有元素进行排序,最后,将整个排序后的流收集到集合
我有一个产品类: 如果group是一个单独的字段,就像name一样,我可以这样做: 如何使用? 预期的结果如下所示,对于productList中存在的每个组,映射到在其字段中具有该组的产品列表
我对从流中排序列表感兴趣。这是我正在使用的代码: 我是不是漏了什么?之后不会对列表进行排序。 它应该根据最低值的项目对列表进行排序。 以及打印方法:
但我得到一条错误消息,说无法在原语类型int上调用compareToIgnoreCase(int) 我如何修复这段代码,使它能够用整数值对列表进行排序?
我有一个这样的方法: 此方法需要以如下字符串形式返回3个最昂贵项目的产品ID:“item1,item2,item3”。我应该只能使用溪流,我被困在这里了。我应该能够按值对项目进行排序,然后获得产品ID,但我似乎无法使其正常工作。 编辑: 产品ID位于入口类中
我有一个包含甲板排名的枚举。我将这些排名添加到一个数组中。当我使用Arrays.sort使用自定义比较器对数组进行排序时,它没有排序,而是返回了这个: 有什么建议吗?谢谢 下面是代码: