gpt4 book ai didi

lambda - 使用 java 8 流对列表项进行分组和求和

转载 作者:行者123 更新时间:2023-12-02 04:38:32 24 4
gpt4 key购买 nike

假设我有一个 List<Banana> bananas 。其中 Banana 类定义如下:

Banana.java

public class Banana{
String name;
Long weight;
Long price;
// getters & setters
}

香蕉列表包含:

[
{"banana1", 10, 20},
{"banana1", 10, 20},
{"banana1", 10, 20},
{"banana2", 20, 30},
{"banana2", 30, 30},
{"banana3", 50, 40},
]

我想要在这里做的是按香蕉的名称进行分组,其中对重量列和价格列(每个单独)进行求和,以便我可以得到以下结果:

[
{"banana1", 30, 60},
{"banana2", 50, 60},
{"banana3", 50, 40},
]

提前致谢。

最佳答案

您可以使用合并功能将它们与 Collectors.toMap 分组:

Map<String,Banana> bananasByName =
bananas.stream()
.collect(Collectors.toMap(Banana::getName,
Function.identity(),
(b1,b2)->{
b1.addWeightAndPrice(b2); return b1;
}));

其中addWeightAndPriceBanana类的一个实例方法,它将传入的Banana的重量和价格添加到Banana中 调用它的实例。

如果您不想改变原始 Banana 实例,您可以更改合并函数以创建新的 Banana 实例并向其添加重量和价格两个输入 Banana 实例的值。

关于lambda - 使用 java 8 流对列表项进行分组和求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49727957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com