Stream分组并且重新处理每个分组里面元素的详细信息

        List aa = CollUtil.newArrayList("a*4", "b*3", "a*2", "c*4");

        Map> aam =
                aa.stream().collect(Collectors.groupingBy(a -> {
                    List bb = StrUtil.split(a, '*');
                    if (bb.size() != 2) {
                        throw new ReException(a  + "格式错误");
                    }
                    // key
                    return bb.get(0);
                }, Collectors.mapping(s-> StrUtil.split(s, '*').get(1), Collectors.toList())));

        System.out.println(aam);


        输出:{a=[4, 2], b=[3], c=[4]}


        // 分组求和
         Map aam =
                aa.stream().collect(Collectors.groupingBy(a -> {
                    List bb = StrUtil.split(a, '*');
                    if (bb.size() != 2) {
                        throw new ReException(a  + "格式错误");
                    }
                    // key
                    return bb.get(0);
                }, Collectors.mapping(s-> StrUtil.split(s, '*').get(1), Collectors.summingInt(s -> Integer.valueOf(s)))));

     输出:{a=6, b=3, c=4}

 

你可能感兴趣的:(JAVA)