Java Stream 合并两个Map

文章讲述了如何利用Java的StreamAPI优雅地合并两个Map对象,特别是当Map的值是Set类型时。通过Stream的flatMap和collect方法,以及Collectors.toMap函数,实现了当键相同的情况下来合并Set值,避免了硬编码的复杂性。
摘要由CSDN通过智能技术生成

今天有一个场景,需要将两个Map合并,示例数据如下:

# Map1
{
    "1000":[
        "101",
        "102",
        "103"
    ],
    "1001":[
        "201",
        "202"
    ]
}

# Map2
{
    "1000":[
        "102",
        "103",
        "104"
    ],
    "1002":[
        "301",
        "302"
    ]
}
# 合并后的结果
{
    "1000":[
        "101",
        "102",
        "103",
        "104"
    ],
    "1001":[
        "201",
        "202"
    ],
    "1002":[
        "301",
        "302"
    ]
}

如果硬写的话还是比较麻烦,但是使用Stream流可以很方便的完成这个操作

Map<String, Set<String>> oldData = JSON.parseObject("{\"1000\":[101,102,103],\"1001\":[201,202]}", new TypeReference<Map<String, Set<String>>>() {
});
Map<String, Set<String>> newData = JSON.parseObject("{\"1000\":[102,103,104],\"1002\":[301,302]}", new TypeReference<Map<String, Set<String>>>() {
});
Map<String, Set<String>> finalMap = Stream.of(oldData, newData)
		.flatMap(map -> map.entrySet().stream())
		.collect(
				Collectors.toMap(
						Map.Entry::getKey,
						Map.Entry::getValue,
						(set1, set2) -> {
							Set<String> mergeSet = new HashSet<>(set1);
							mergeSet.addAll(set2);
							return mergeSet;
						}
				)
		);
;

需要特别说明的是 Collectors.toMap( )中的第三个参数是Key相同情况下的处理规则,上图的代码意思就是如果这两个Map的Key相同,则把两个Key对应的Value放入同一个Set中返回

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值