Gus*_*lva 5 java functional-programming java-8 java-stream
假设有一个List<Object>和,Object其中包含两个方法:getUserId和getPoints。
考虑List<Object>包含三个对象,并且它们包含以下数据:
userId A; 3 points
userId A; 5 points
userId B; 1 point
Run Code Online (Sandbox Code Playgroud)
正确收集此内容后,我希望Map<String, Integer>它看起来像这样:
A: 8,
B: 1
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Java的8个功能接口(流)进行此操作,因为我只需要最终结果,而在它们之间也不需要任何映射。如果没有其他方法,我愿意对此进行修改。我首先想到了这个:
this.service.getListObject()
.stream()
.collect(Collectors.toMap(Object::getUserId, Object::getPoints));
Run Code Online (Sandbox Code Playgroud)
但是,这显示出不足,因为它将始终用最新值替换密钥,从而产生:
A: 5,
B: 1
Run Code Online (Sandbox Code Playgroud)
如何调整的最后一位,Collectors.toMap()以根据已存储在地图中的值自动增加其值,以便产生上面的结果?
使用Collectors.groupingBy连同Collectors.summingInt作为下游收集器:
this.service.getListObject()
.stream().collect(Collectors.groupingBy(
Object::getUserId, Collectors.summingInt(Object::getPoints)));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |