JAVA stream对数据分组后求每组的最大值
具体需求
对industryCode分组,然后通过取出每组的num的最大值
// 实体类
@Data
@AllArgsConstructor
public class IndustryStockRelation {
private Long id;
private String industryCode;
private Integer num;
}
// 具体实现
public static void main(String[] args) {
List<IndustryStockRelation> industryStockRelationList = new LinkedList<>();
IndustryStockRelation i1 = new IndustryStockRelation(1L,"100720401",3);
IndustryStockRelation i2 = new IndustryStockRelation(2L,"100720402",6);
IndustryStockRelation i3 = new IndustryStockRelation(2L,"100720401",9);
IndustryStockRelation i4 = new IndustryStockRelation(3L,"100720403",6);
industryStockRelationList.add(i1);
industryStockRelationList.add(i2);
industryStockRelationList.add(i3);
industryStockRelationList.add(i4);
Map<String,IndustryStockRelation> map =
industryStockRelationList.parallelStream().collect(
Collectors.groupingBy(IndustryStockRelation::getIndustryCode,
Collectors.collectingAndThen(
Collectors.reducing((a,b)->a.getNum()> b.getNum()?a:b),Optional::get)
)
);
}
// 结果
{
100720402=IndustryStockRelation(id=2, industryCode=100720402, num=6),
100720403=IndustryStockRelation(id=3, industryCode=100720403, num=6),
100720401=IndustryStockRelation(id=2, industryCode=100720401, num=9)
}