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

如何使用Vavr将List<Map<String,Object>>合并为单个Map<String,Object>

Vavr List 合并为单个Map实现示例

基础实现(键冲突默认后值覆盖前值)

直接使用Vavr原生的reduce+merge组合即可完成合并,代码如下:

import io.vavr.collection.List;
import io.vavr.collection.Map;

public class MapMergeExample {
    public static void main(String[] args) {
        // 测试数据源:Vavr List 包含多个Vavr Map
        List<Map<String, Object>> listOfMaps = List.of(
            Map.of("userName", "李明", "gender", "男", "age", 24),
            Map.of("department", "技术部", "age", 25), // age键重复,默认取后值25
            Map.of("post", "后端开发工程师")
        );

        // 核心合并逻辑
        Map<String, Object> mergedMap = listOfMaps.reduce(
            Map.empty(), // 初始空累加器
            (acc, currentMap) -> acc.merge(currentMap)
        );

        // 输出结果:HashMap(userName -> 李明, gender -> 男, age -> 25, department -> 技术部, post -> 后端开发工程师)
        System.out.println(mergedMap);
    }
}

自定义键冲突处理实现

如果需要自己定义键重复时的处理逻辑,可以使用带冲突处理函数的merge重载方法:

// 示例:键冲突时将新旧值用竖线拼接
Map<String, Object> customMergedMap = listOfMaps.reduce(
    Map.empty(),
    (acc, currentMap) -> acc.merge(
        currentMap,
        // 冲突处理函数:入参为旧值、新值,返回处理后的最终值
        (oldVal, newVal) -> oldVal + "|" + newVal
    )
);
// 此时age字段值为 "24|25"

注意事项

  • 确保代码中导入的List、Map都是io.vavr.collection包下的实现,不要和JDK原生java.util包下的集合类混用
  • 如果需要在出现重复键时抛出异常,只需将冲突处理函数修改为抛出异常即可:(oldVal, newVal) -> {throw new RuntimeException("存在重复键,值冲突:" + oldVal + " / " + newVal);}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:36:03