intstream 不能直接生成泛型集合,需先调用 boxed() 装箱为 integer 流,再 collect 收集;arrays.aslist(int[]) 会将整个数组视为单个元素,错误;longstream、doublestream 同理,boolean[] 和 char[] 需特殊处理。

Java 8 的 IntStream 是处理 int 原始类型数组的高效方式,但它不能直接生成泛型集合(如 List<integer></integer>),因为原始流与引用类型存在类型鸿沟。关键在于:先用 boxed() 将 int 装箱为 Integer,再收集为集合。
用 IntStream 将 int[] 转为 List
这是最常见场景。原始数组无法直接用 Arrays.asList()(它会把整个数组当一个元素),必须借助流。
- 步骤清晰:`Arrays.stream(intArray)` → `boxed()` → `collect(Collectors.toList())`
-
代码示例:
int[] nums = {1, 2, 3, 4, 5}; List<integer> list = Arrays.stream(nums) .boxed() .collect(Collectors.toList());</integer> -
注意:`boxed()` 不可省略,否则编译失败——
IntStream的collect不支持直接转List<integer></integer>。
转其他泛型集合:Set、LinkedList、自定义类型
只要最终目标是引用类型集合,套路一致:装箱 + 指定收集器。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
转 HashSet(去重):
.collect(Collectors.toSet()) -
转 LinkedList:
.collect(Collectors.toCollection(LinkedList::new)) -
转 ArrayList(显式指定):
.collect(Collectors.toCollection(ArrayList::new)) -
转自定义对象列表(如 Person):需配合
map,例如.map(i -> new Person("user" + i, i)),再boxed()后收集(注意:此处map在boxed()前,操作的是int;若在之后,则操作Integer)
避免常见错误:不要用 Arrays.asList(int[])
Arrays.asList(new int[]{1,2,3}) 返回的是 List<int></int>,即只含一个元素(整个数组),不是你想要的 List<integer></integer>。
- ❌ 错误写法:
List<integer> bad = Arrays.asList(new int[]{1,2,3});</integer> - ✅ 正确替代:
Arrays.stream(new int[]{1,2,3}).boxed().toList()(Java 16+)或.collect(Collectors.toList())(兼容旧版)
其他基本类型数组怎么办?
LongStream、DoubleStream 同理,分别用 boxed() 得到 Long、Double 流,再收集。
-
long[] → List<long></long>:Arrays.stream(longs).boxed().collect(...) -
double[] → List<double></double>:Arrays.stream(doubles).boxed().collect(...) -
boolean[]和char[]没有对应原始流,需先转成Integer流或用传统循环(如IntStream.range(0, arr.length).mapToObj(i -> arr[i]))
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










