请教大家 java8 stream 的问题

2019-01-25 13:32:03 +08:00
 mawerss1

下面的代码怎么用 stream 实现呢?想了半天绕不明白,stram api 用的太少了

public void countBlame(List<Blame> blames) {
    final HashMap<String, TotalResult> map = map();
    for (Blame author : blames) {
        if (map.containsKey(author.getName())) {
            final TotalResult totalResult = map.get(author.getName());
            totalResult.setRows(totalResult.getRows() + author.getRows());
        }else{
            final TotalResult totalResult = new TotalResult(author.getName(), 0, 0, author.getRows(), null);
            map.put(author.getName(), totalResult);
            results.add(totalResult);
        }
    }
}

private HashMap<String,TotalResult> map() {
    final HashMap<String, TotalResult> stringTotalResultHashMap = new HashMap<>();
    for (TotalResult result : results) {
        stringTotalResultHashMap.put(result.getName(), result);
    }
    return stringTotalResultHashMap;
}
2797 次点击
所在节点    Java
8 条回复
GTim
2019-01-25 13:57:19 +08:00
第二个

results.stream().collect(Collectors.toMap(TotalResult::getName, result -> result))
EXE
2019-01-25 13:57:33 +08:00
results.stream().collect(Collectors.toMap(TotalResult::getName));
Volio
2019-01-25 14:13:11 +08:00
List<TotalResult> result = blames.stream().collect(Collectors.groupingBy(Blame::getName, Collectors.mapping(Blame::getRows, Collectors.reducing(0, Integer::sum)))).entrySet().stream().map(o -> new TotalResult(o.getKey(),0,0,o.getValue(),null)).collect(Collectors.toList());
yidinghe
2019-01-25 14:16:43 +08:00
GTim
2019-01-25 14:20:59 +08:00
第一个

blames.stream().map(author => new TotalResult(author.getName(), 0, 0, author.getRows(), null)).collect(Collectors.toMap(TotalResult::getName, result -> result,(oldValue,newValue)-> {oldValue.setRows(oldValue.getRows() + newValue.getRows();return oldValue;}))
mawerss1
2019-01-25 14:24:57 +08:00
@yidinghe 醍醐灌顶,感谢老哥
daemonk
2019-01-25 14:28:33 +08:00
Map<String, TotalResult> map = blames.stream().collect(
Collectors.toMap(
Blame::getName,
blame -> new TotalResult(blame.getName(), 0, 0, blame.getRows(), null),
(tr1, tr2) -> {
tr1.setRows(tr1.getRows() + tr2.getRows());
return tr1;
}, HashMap::new));
List<TotalResult> results = new ArrayList<>(map.values());
thinkmore
2019-01-29 09:56:18 +08:00
为啥我看着 lambda 这么费力

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/530557

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX