如何解决将流映射到具有总计的对象列表
Map<String,Long> countsMap = sampleObjectList.stream()
.collect(Collectors.groupingBy(sampleObject::getStatus,Collectors.counting()));
获取地图后,我需要创建一个对象列表,其中包含每个状态的计数和总计数。
我使用下面的 for 循环执行此操作的正常方法。
List<ObjectCountDTO> dtoList = new ArrayList<>();
long allCount = 0L;
for(Map.Entry<String,Long> entry : countsMap.entrySet()) {
long count = entry.getValue();
allCount += count;
dtoList.add(new ObjectCountDTO(entry.getKey(),count));
}
dtoList.add(new ObjectCountDTO("ALL",allCount));
有没有办法在 java 8 中使用流来做到这一点?
解决方法
您可以stream
频率entrySet
的{{1}}。
Map
,
如果你想在一个流中做所有的事情,你可以使用下面的代码片段
List<ObjectCountDTO> dtoList = new ArrayList<>();
dtoList.add(new ObjectCountDTO("ALL",countsMap.entrySet().stream()
.map(e -> {
dtoList.add(new ObjectCountDTO(e.getKey(),e.getValue()));
return e;
})
.map(e -> e.getValue())
.reduce(0L,(a,b) -> a + b)));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。