如何使用Stream API将嵌套Map指定内层key的List<Integer>合并为单个列表
完整可运行示例
import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; public class NestedMapProcess { public static void main(String[] args) { // 构造示例数据 Map<String, Map<String, List<Integer>>> nestedMap = Map.of( "KeyA", Map.of("keya", List.of(1, 2, 3)), "KeyB", Map.of("keya", List.of(4, 5, 6)), "KeyC", Map.of("keyb", List.of(7, 8)) ); String targetInnerKey = "keya"; List<Integer> result = processNestedMap(nestedMap, targetInnerKey); System.out.println(result); // 输出:[1, 2, 3, 4, 5, 6] } private static List<Integer> processNestedMap(Map<String, Map<String, List<Integer>>> nestedMap, String targetInnerKey) { return nestedMap.values().stream() .filter(innerMap -> innerMap.containsKey(targetInnerKey)) .map(innerMap -> innerMap.get(targetInnerKey)) .filter(Objects::nonNull) // 兼容内层key对应value为null的场景,不需要可以删除 .flatMap(List::stream) .collect(Collectors.toList()); } }
关键步骤说明
- 调用外层Map的
values()方法,直接忽略不需要保留的外层key,只处理第二层嵌套的Map集合 - 通过
filter筛选出所有包含目标内层key的第二层Map - 用
map取出第二层Map中目标key对应的List<Integer> flatMap将多个List的元素平铺为单个Integer类型的流,实现列表合并- 最后用
collect将流收集为新的List<Integer>
内容的提问来源于stack exchange,提问作者Jawad El Fou
相关产品推荐
相关产品推荐

