java Stream Map集合处理

java Stream 使用

stream对Map集合的处理
1 Map x 处理成 Map y 简单示例:

Map<String, String> x;
Map<String, Integer> y =
    x.entrySet().stream()
        .collect(Collectors.toMap(
            e -> e.getKey(),
            e -> Integer.parseInt(e.getValue())
        ));

2 计算List>中所有map的value的sum:
数据结构:
list ( map(“商品id”,“100”))
list ( map(“商品id”,“200”))
求所有商品价格 100+200 =300
stream处理两层集合:

 List<Map<String,Double>> amountList=baseMapper.get(...);
      Double dTotal  =amountList.stream().map(
                m->m.entrySet().stream()
                                .filter(e->"amount".equals(e.getKey()))
                                .map(e->{
                                    Object o=e.getValue();
                                    Double d=Double.parseDouble(o.toString());
                                    return d;
                                })
                                .reduce(0d,(a,b)->a+b)
        ). reduce(0d,(a,b)->a+b);
 System.out.println("商品总金额:"+dTotal);

1 先对外层list进行map
2 对内层Map集合 filter 过滤key(key为金额的)
再对Map集合进行map,将map 在map方法中转为 一个数据元素
3 对内层map完的流进行reduce,得到一个map集合内的value的sum
4 对外层list集合map的元素reduce,得到所有Map的value的sum
其他实现方式:
1 reduce也可以换成collect,在外层collect中进行聚合:
内层reduce–> .collect(Collectors.toList())
外层reduce–>).collect(Collectors.summarizingDouble(e->e));
最终结果再getSum()
2 map都换成mapToDouble
reduce换成.sum()

Double dTotal  =amountList.stream().mapToDouble(
                m->m.entrySet().stream()
                                .filter(e->"amount".equals(e.getKey()))
                                .mapToDouble(e->{
                                    Object o=e.getValue();
                                    Double d=Double.parseDouble(o.toString());
                                    return d;
                                })
                                .sum()
        ). sum();

聚合可以用处理方法reduce,也可以用数值流mapToDouble,也可以用收集集合collect里的聚合方法。
实现过程中整理了stream流生命周期各个节点和方法,比较全的结构了:

来源:
https://www.jianshu.com/p/0bb4daf6c800
https://www.jianshu.com/p/e429c517e9cb

另:
java8使用stream计算map集合的值和
https://blog.csdn.net/u012269637/article/details/100934966

Java8新特性-Stream API 常用完整版
https://blog.csdn.net/hxhaaj/article/details/80725857#2333-summingdouble-%E6%B1%82%E5%92%8C%E5%B9%B6%E8%BD%AC%E6%8D%A2%E6%88%90double%E7%B1%BB%E5%9E%8B

java8 Stream 对List的分组合并操作
https://www.jianshu.com/p/1f2b959e8e68

你可能感兴趣的:(java)