让我们假设我有墙壁listOfWalls的名单,每个墙对象还具有以下层次:
wall -> wallType -> wallEntry(list of wall materials ) -> wallMaterial -> wallMaterialType(enum type),
所以为了得到这个列表中的一些墙壁wallMaterialType,我会去喜欢
wall.getWallType().getWallEntry().getWallMaterial().getWallMaterialType();
现在,华尔街类也有以下PARAMS:width
和height
其相乘通过调用我的函数获取墙的面积getWallArea()
从墙类。
我想实现的是从计算墙壁的列表得到所有wallMaterialTypes的区域,所以例如让我们假设我们有两两面墙:
现在我想什么输出已经是:
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,你就失去了沃尔的wallArea
。因此,我已分组一切都变成一个单一的flatMap
步骤墙体材料类型和墙面积的返回地图(简单对将做太多)。
(该flatMap
步骤返回的一个简单的映射WallMaterialType
和wallArea
到的wallMaterialType
属于)。
在收集类似,你所编写的程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句