首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Java

请教大家 java8 stream 的问题

  •  
  •   mawerss1 · 173 天前 · 1355 次点击
    这是一个创建于 173 天前的主题,其中的信息可能已经有所发展或是发生改变。

    下面的代码怎么用 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;
    }
    
    8 回复  |  直到 2019-01-29 09:56:18 +08:00
        1
    GTim   173 天前
    第二个

    results.stream().collect(Collectors.toMap(TotalResult::getName, result -> result))
        2
    EXE   173 天前
    results.stream().collect(Collectors.toMap(TotalResult::getName));
        3
    Volio   173 天前
    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());
        5
    GTim   173 天前
    第一个

    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;}))
        6
    mawerss1   173 天前
    @yidinghe 醍醐灌顶,感谢老哥
        7
    daemonk   173 天前
    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());
        8
    thinkmore   170 天前
    为啥我看着 lambda 这么费力
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4084 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 20ms · UTC 02:28 · PVG 10:28 · LAX 19:28 · JFK 22:28
    ♥ Do have faith in what you're doing.