通过枚举参数项目使用Java8流的列表排序

joyag95613:

让我们假设我有墙壁listOfWalls的名单,每个墙对象还具有以下层次:

wall -> wallType -> wallEntry(list of wall materials ) -> wallMaterial -> wallMaterialType(enum type), 

所以为了得到这个列表中的一些墙壁wallMaterialType,我会去喜欢

wall.getWallType().getWallEntry().getWallMaterial().getWallMaterialType();

现在,华尔街类也有以下PARAMS:widthheight其相乘通过调用我的函数获取墙的面积getWallArea()从墙类。

我想实现的是从计算墙壁的列表得到所有wallMaterialTypes的区域,所以例如让我们假设我们有两两面墙:

  1. 长城1以下wallMaterialTypes:砖,石膏,木材和35平方米的wallArea()米。
  2. 壁2与以下wallMaterialTypes:干草,石膏和的105平方米wallArea()。

现在我想什么输出已经是:

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)));

从那里,我很无能怎么走?帮助表示赞赏。

user7:

看来你想被映射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步骤返回的一个简单的映射WallMaterialTypewallArea到的wallMaterialType属于)。

在收集类似,你所编写的程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章