我有一个包含两个字符串值和一个 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
来收集具有相同diviName
和mLevel
的DashboardOneData
实例,
例如:
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
成员包含具有相同 diviName
和 mLevel
的所有输入 DashboardOneData
实例的 fullHours
的总和。
要将 Map
的值添加到新的 List
中,您需要做的就是:
List<DashboardOneData> list = new ArrayList<>(map.values());
关于java - 获取相同字符串组中 ArrayList 中 double 值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48767009/