要按对象分组映射的对象列表 属性
List of object to map group by object property
我有一个 Object 列表,其中有一些与 GL Head 一起。
我想通过 GL-Head 对这些金额的组总和进行 Map
。
List<Fees> feesList = new ArrayList<>();
Fees f = new Fees();
f.setGlHead(10);
f.setImposed(25.0);
feesList.add(f);
f = new Fees();
f.setGlHead(11);
f.setImposed(30.0);
feesList.add(f);
f = new Fees();
f.setGlHead(10);
f.setImposed(15.0);
feesList.add(f);
Map<Integer, Double> map = ..... // how by lambda ?
在哪里,
关键整数是 GL Head,Value Double 是 GL Head 强加金额的组总和,结果类似于具有值 >> (10, 40.0) & (11, 30)
的映射
流来救援!此任务本质上是 Collectors documentation 中的示例之一,只是使用双精度而不是整数。
var map = feesList.stream()
.collect(Collectors.groupingBy(Fees::getGlHead,
Collectors.summingDouble(Fees::getImposed));
(实际方法名根据需要调整)
如果你不想使用流,你可以通过循环获得相同的效果:
var map = new HashMap<Integer, Double>(); // Or whatever type of map
for (Fees fee : feeList) {
map.merge(fee.getG1Head(), fee.getImposed(), Double::sum);
}
如果映射中不存在给定键,Map::merge
函数将使用给定值添加它。如果该键已经存在,则将新值和现有值传递给作为第三个参数的函数,并使用其结果更新地图。
我有一个 Object 列表,其中有一些与 GL Head 一起。
我想通过 GL-Head 对这些金额的组总和进行 Map
。
List<Fees> feesList = new ArrayList<>();
Fees f = new Fees();
f.setGlHead(10);
f.setImposed(25.0);
feesList.add(f);
f = new Fees();
f.setGlHead(11);
f.setImposed(30.0);
feesList.add(f);
f = new Fees();
f.setGlHead(10);
f.setImposed(15.0);
feesList.add(f);
Map<Integer, Double> map = ..... // how by lambda ?
在哪里, 关键整数是 GL Head,Value Double 是 GL Head 强加金额的组总和,结果类似于具有值 >> (10, 40.0) & (11, 30)
的映射流来救援!此任务本质上是 Collectors documentation 中的示例之一,只是使用双精度而不是整数。
var map = feesList.stream()
.collect(Collectors.groupingBy(Fees::getGlHead,
Collectors.summingDouble(Fees::getImposed));
(实际方法名根据需要调整)
如果你不想使用流,你可以通过循环获得相同的效果:
var map = new HashMap<Integer, Double>(); // Or whatever type of map
for (Fees fee : feeList) {
map.merge(fee.getG1Head(), fee.getImposed(), Double::sum);
}
如果映射中不存在给定键,Map::merge
函数将使用给定值添加它。如果该键已经存在,则将新值和现有值传递给作为第三个参数的函数,并使用其结果更新地图。