gpt4 book ai didi

java - 获取相同字符串组中 ArrayList 中 double 值的总和

转载 作者:搜寻专家 更新时间:2023-11-01 03:16:28 24 4
gpt4 key购买 nike

我有一个包含两个字符串值和一个 double 值的 ArrayList。我想对相同字符串组中的 double 值求和。然后将它们分配给一个新的列表

public class DashboardOneData {

private String diviName;
private double fullHours;
private String mLevel;

public DashboardOneData(String x, double y, String z){
this.diviName= z;
this.fullHours= y;
this.mLevel= y;
}

}

这是一个示例 ArrayList.....

List<DashboardOneData > items = new ArrayList<DashboardOneData >();
items.add(new DashboardOneData ("A", 1.11 , "x"));
items.add(new DashboardOneData ("A", 1.52 , "x"));
items.add(new DashboardOneData ("B", 2.22 , "m"));
items.add(new DashboardOneData ("A", 3.12 , "m"));
items.add(new DashboardOneData ("B", 2.52 , "m"));
items.add(new DashboardOneData ("C", 2.85 , "y"));
items.add(new DashboardOneData ("A", 2.22 , "y"));
items.add(new DashboardOneData ("A", 3.12 , "y"));
items.add(new DashboardOneData ("B", 1.01 , "m"));
items.add(new DashboardOneData ("C", 2.85 , "y"));

比如我想要的是,

sum String group A, x(double value)
sum String group A, m(double value)
sum String group A, y(double value)
sum String group B, x(double value)
sum String group B, m(double value)
sum String group B, y(double value)


A-x = 2.63
A-m = 3.12
B-m = 5.75
C-y = 5.70

最佳答案

您可以使用Map 来收集具有相同diviNamemLevelDashboardOneData 实例,

例如:

Map<String,DashboardOneData>
map = items.stream()
.collect(Collectors.toMap(d -> d.getDiviName() + "-" + d.getLevel(),
Function.identity(),
(d1,d2) -> new DashboardOneData (d1.getDiviName(),d1.getHours()+d2.getHours(),d1.getLevel())));

这将创建一个 Map,其中键的形式为“B-m”,对应的值是一个 DashboardOneData 实例,其 fullHours 成员包含具有相同 diviNamemLevel 的所有输入 DashboardOneData 实例的 fullHours 的总和。

要将 Map 的值添加到新的 List 中,您需要做的就是:

List<DashboardOneData> list = new ArrayList<>(map.values());

关于java - 获取相同字符串组中 ArrayList 中 double 值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48767009/

24 4 0