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

如何使用Java Collectors将Map值转换为指定结构的List?

使用Java Collectors优化JSON格式转换

你可以通过Java Stream API结合Collectors来更简洁、优雅地完成这个转换,相比forEach循环,这种方式是声明式的,代码可读性更高,也避免了手动维护列表的繁琐操作。

实现方案

方式1:使用Map临时对象(无需自定义类)

如果不想额外定义POJO,可以直接用Map.of()生成每个元素的结构,再通过Collectors收集为列表,最后包装成目标JSON的外层结构:

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
import java.util.stream.Collectors;

public class JsonTransformExample {
    public static void main(String[] args) throws Exception {
        // 模拟输入的Map
        Map<String, String> input = Map.of("k1", "v1", "k2", "v2", "k3", "v3", "k4", "v4");

        // 转换为input_batch对应的列表
        var inputBatchList = input.values().stream()
                .map(value -> Map.of("value", value))
                .collect(Collectors.toList());

        // 包装成最终的结构
        var resultMap = Map.of("input_batch", inputBatchList);

        // 序列化为JSON字符串
        ObjectMapper objectMapper = new ObjectMapper();
        String targetJson = objectMapper.writeValueAsString(resultMap);
        System.out.println(targetJson);
    }
}

方式2:使用自定义POJO(类型更安全)

如果追求类型安全,可以定义一个简单的POJO来承载每个value字段,再进行转换:

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
import java.util.stream.Collectors;

// 自定义POJO
class ValueEntry {
    private String value;

    public ValueEntry(String value) {
        this.value = value;
    }

    // Jackson序列化需要getter
    public String getValue() {
        return value;
    }
}

public class JsonTransformWithPojo {
    public static void main(String[] args) throws Exception {
        Map<String, String> input = Map.of("k1", "v1", "k2", "v2", "k3", "v3", "k4", "v4");

        var inputBatchList = input.values().stream()
                .map(ValueEntry::new)
                .collect(Collectors.toList());

        var resultMap = Map.of("input_batch", inputBatchList);

        ObjectMapper objectMapper = new ObjectMapper();
        String targetJson = objectMapper.writeValueAsString(resultMap);
        System.out.println(targetJson);
    }
}

优势说明

  • 相比forEach循环,Stream+Collectors的代码更简洁,逻辑一目了然;
  • 支持并行处理(将stream()改为parallelStream()即可,适合大数据量场景);
  • 避免了手动创建列表、循环添加元素的冗余代码,减少出错概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:57:55