java使用Java8流按枚举参数对列表中的项进行排序
假设我有一个墙列表ListoWalls,每个墙对象都有以下层次结构:
wall -> wallType -> wallEntry(list of wall materials ) -> wallMaterial -> wallMaterialType(enum type),
所以为了得到这个列表中某一面墙的wallMaterialType,我想
wall.getWallType().getWallEntry().getWallMaterial().getWallMaterialType();
现在,类Wall还有以下参数:width
和height
,它们相乘,通过从Wall类调用我的函数getWallArea()
得到墙的面积
我想要实现的是从计算的墙列表中获得所有墙材料类型的面积,因此,例如,假设我们有两面墙:
- 墙1,包括以下墙体材料类型:砖、灰泥、木材和35平方米的瓦莱拉(Wallerea)李>
- 2号墙,墙体材料类型如下:干草、灰泥和瓦莱拉(105平方米)李>
现在我想要的是:
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)));
从那里我不知道该怎么走?谢谢你的帮助
# 1 楼答案
似乎您希望通过
WallMaterialType
枚举进行映射如果你继续调用
map(..)
并到达WallMaterials,你将失去墙的wallArea
。因此,我将所有内容分组到一个flatMap
步骤中,以返回墙材质类型和墙面积的贴图(简单的一对也可以)(步骤
flatMap
返回WallMaterialType
和wallArea
所属wallMaterialType
的简单映射)收集的内容与你已经写过的内容类似