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

Java8/11中如何用flatMapToInt()将Stream<List<Integer>>转IntStream

flatMapToInt 实现逻辑

flatMapToInt 方法要求传入一个函数,将流中的每个元素映射为IntStream,最后将所有分散的IntStream合并为一个统一的基本类型整数流。
针对当前Stream<List<Integer>>的转换场景,只需要对每个遍历到的子List做流转换+拆箱即可,核心传入的lambda逻辑如下:

// 核心实现片段
IntStream list2 = list.flatMapToInt(singleList -> 
    singleList.stream().mapToInt(Integer::intValue)
);

完整可运行的示例代码:

import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class Demo {
    public static void main(String[] args) {
        System.out.println("----flatMapToInt----"); 

        Stream<List<Integer>> list = Stream.of( 
            Arrays.asList(1,2,3,4), 
            Arrays.asList(10,20,30,40)
        ); 
        IntStream list2 = list.flatMapToInt(singleList -> 
            singleList.stream().mapToInt(Integer::intValue)
        ); 

        // 遍历输出验证结果:1 2 3 4 10 20 30 40
        list2.forEach(num -> System.out.print(num + " "));
    }
}

逻辑说明

  • 遍历外层流时,singleList代表当前处理到的每一个List<Integer>实例
  • 调用singleList.stream()将单个List转为Stream<Integer>包装类型对象流
  • 调用mapToInt(Integer::intValue)将包装类型流拆箱为基本类型int组成的IntStream,满足flatMapToInt的返回值要求
  • 最终flatMapToInt会自动将所有子List生成的IntStream打平合并,得到最终需要的整数基本类型流

该写法在Java 8、Java 11环境下均兼容可直接运行。如果觉得方法引用写法繁琐,也可以写成自动拆箱的简化形式:singleList.stream().mapToInt(i -> i),运行效果完全一致。

内容的提问来源于stack exchange,提问作者Moon and Dishes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:15:34