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

Java Streams:如何将Stream<List<Integer>>转换为Stream<Integer>

问题描述

我要编写一个方法,接收Map<String, List<Integer>>类型参数和用于过滤的String类型参数name,返回类型为Stream<Integer>。目前我的实现返回的是Stream<List<Integer>>,需要将其转换为Stream<Integer>以遍历列表中的所有Integer元素。

示例Map:

Map<String, List<Integer>> person = Map.of(
    "John", List.of(54, 18),
    "Alex", List.of(28),
    "Tom", List.of(78, 42)
);

当前代码实现:

return table.entrySet().stream()
    .filter(map -> map.getKey().equals(name))
    .map(map -> map.getValue());

解决方案

你需要用flatMap替代map来完成从Stream<List<Integer>>到Stream<Integer>的转换。flatMap的作用是将每个列表中的元素“展开”为独立的流元素,最终合并成一个连续的Stream<Integer>。

修改后的代码如下:

return table.entrySet().stream()
    .filter(entry -> entry.getKey().equals(name))
    .flatMap(entry -> entry.getValue().stream());

更高效的简化写法

由于Map的Key具有唯一性,无需遍历整个entrySet进行过滤,直接通过Key获取对应的List再转换为Stream即可,这种方式效率更高:

return table.getOrDefault(name, Collections.emptyList()).stream();

如果可以确定name对应的Key一定存在于Map中,也可以直接写:

return table.get(name).stream();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:10:21