加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用Java 8 Stream API减少Map

发布时间:2020-12-15 05:14:06 所属栏目:Java 来源:网络整理
导读:我有以下表格的地图: MapInteger,MapString,Double START 让INNER成为内部地图,即 MapString,Double 例如,我想在新的地图中减少START地图 MapInteger,Double END 它具有相同的键,但值不同. 特别是,对于每个键,我希望新的Double值是INNER映射中相应键的值的S
我有以下表格的地图:

Map<Integer,Map<String,Double>> START

让INNER成为内部地图,即

Map<String,Double>

例如,我想在新的地图中减少START地图

Map<Integer,Double> END

它具有相同的键,但值不同.
特别是,对于每个键,我希望新的Double值是INNER映射中相应键的值的SUM.

我怎样才能通过使用JAVA 8的STREAM API实现这一目标?

感谢大家.

编辑:示例地图是

------------------------------
|      |  2016-10-02   3.45   |
| ID1  |  2016-10-03   1.23   |
|      |  2016-10-04   0.98   |
------------------------------
|      |  2016-10-02   1.00   |
| ID2  |  2016-10-03   2.00   |
|      |  2016-10-04   3.00   |
------------------------------

我想要一个像以下一样的新地图:

--------------------------------
|      |                       |
| ID1  |  SUM(3.45,1.23,0.98)  |
|      |                       |
--------------------------------
|      |                       |
| ID2  |  SUM(1.00,2.00,3.00)  |
|      |                       |
--------------------------------

解决方法

它会对你有用

Map<Integer,Double> collect = START.entrySet()
        .stream()
        .collect(
            Collectors.toMap(
                Map.Entry::getKey,e -> e.getValue()
                      .values()
                      .stream()
                      .reduce(0d,(a,b) -> a + b)
                )
        );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读