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

如何将嵌套结构的Map转换为扁平String列表?

解决方案

首先明确你的数据结构:顶层Map<String, Object>中,"data"键对应的值是另一个Map<String, Object>,该内层Map包含"contacts"(List<String>类型)和"phone"(String类型)两个键。

你之前的代码直接收集外层Map的values,会把整个contacts列表作为单个元素加入结果,无法实现扁平化。要解决这个问题,需要遍历内层Map的values,通过flatMap将列表展开,同时保留单个字符串元素:

// 先获取内层的data Map
Map<String, Object> innerData = (Map<String, Object>) data.get("data");

// 扁平化处理得到目标列表
List<String> expectedOutput = innerData.values().stream()
    .flatMap(value -> {
        // 处理List类型的元素,展开并转换为String流
        if (value instanceof List<?>) {
            return ((List<?>) value).stream()
                .filter(String.class::isInstance)
                .map(String.class::cast);
        } 
        // 处理单个String元素,转为单元素流
        else if (value instanceof String) {
            return Stream.of((String) value);
        }
        // 其他类型元素忽略,返回空流
        return Stream.empty();
    })
    .collect(Collectors.toList());

代码说明

  • flatMap的作用是将每个元素(无论是列表还是单个字符串)都转换为流,再合并成一个统一的流;
  • 对List类型的元素,先过滤确保其中的元素都是String类型,再转换为String流;
  • 对单个String元素,直接包装成单元素流;
  • 最后通过collect(Collectors.toList())收集所有元素,得到你需要的扁平字符串列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:09:33