我在流分组方面有困难。
List<FAR> listFar = farList.stream().filter(f -> !f.getStatus().equals(ENUM.STATUS.DELETED))
.collect(Collectors.toList());
List<HAUL> haulList = listFar.stream().map(f -> f.getHaul()).flatMap(f -> f.stream())
.collect(Collectors.toList());
它是按物种分组的,这一切都很好,但还有另一个属性需要处理。
Map<Specie, List<HAUL>> collect = haulList.stream().collect(Collectors.groupingBy(HAUL::getSpecie));
属性: haul.getFishCount();
(整数) haul.getFishWeight();
(大十进制)
有没有可能分组 HAUL::getSpecie
(按种类),但也“合并”在一起,这两个额外的领域,所以我有总数?
例如:我有3个拖运元素,其中鱼种a的重量为50/30/10千克。
我能按种类和总重量分组吗?
3条答案
按热度按时间6uxekuva1#
你可以用
mapping
以及reduce
例如:我希望这有帮助。
mxg2im7a2#
如果我答对了你的问题,你想要
count * weight
每一种。你可以使用
Collectors.groupingBy
下游收集器减少了HAUL
每种的总和haul.getFishCount() * haul.getFishWeight()
:这将得到
count * weight
每一种。如果你能将以下方法添加到你的Haul
班级:然后,收集流将更容易和更可读:
编辑:毕竟,似乎你想为每个字段分别求和。。。
我会用
Collectors.toMap
有一个合并函数。代码如下:它使用一个包含2个元素的列表来存储索引处的鱼数
0
以及鱼的指数重量1
,每一种。hpcdzsge3#
如果我理解正确:
有一种形式可以做:
或者
但你不能让这些同时发生。