You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并Map<Type1,Type2>与Map<Type3,Type1>得到Map<Type3,Type2>

问题分析与解决方案

你的核心问题是流的处理逻辑方向错误:你当前操作的是Type1类型的元素,而目标是构建Type3 -> Type2的映射,应该从map2的Type3键出发,通过关联的Type1去map1中获取对应值,而不是反过来从Type1反向查找Type3。

原代码的关键错误

  1. 数据源错误:将map1.keySet()和map2.values()合并成Type1集合,导致后续无法直接关联到Type3;
  2. map2::get使用错误:map2的键是Type3,传入Type1类型的参数会返回null(或无意义值),完全不符合你需要的键映射逻辑。

正确实现代码

直接遍历map2的entrySet(每个元素包含Type3键和对应的Type1值),过滤出map1中存在对应Type1的条目,再收集为目标Map:

Map<Type3, Type2> result = map2.entrySet().stream()
    // 只保留map1中存在对应Type1的entry
    .filter(entry -> map1.containsKey(entry.getValue()))
    .collect(Collectors.toMap(
        Map.Entry::getKey, // 取map2的key作为结果的key(Type3类型)
        entry -> map1.get(entry.getValue()), // 取map1中对应Type1的value作为结果的value(Type2类型)
        // 保留你原来的冲突处理逻辑:当多个Type3对应同一个Type2时,保留非空的旧值
        (v1, v2) -> StringUtils.isNotEmpty(v1) ? v1 : v2
    ));

逻辑说明

  • 遍历map2的条目:直接获取Type3(键)和对应的Type1(值),这是构建目标Map的核心关联关系;
  • 过滤条件:确保只有map1中存在对应Type1的条目才会被处理,避免出现null值;
  • 收集逻辑:直接映射Type3到Type2,完全符合你的需求,同时保留了原有的冲突处理规则。

内容的提问来源于stack exchange,提问作者Bourg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:55:09