如何用Stream创建Integer数组?类型转换报错求助
问题解决:IntStream转Integer[]编译错误
你混淆了IntStream和Stream<Integer>的区别——Random.ints()返回的是基本类型int的流(IntStream),不是包装类型Integer的流。IntStream的toArray()方法默认返回int[],自然无法直接赋值给Integer[]类型变量,这就是编译报错的原因。
以下是两种可行的解决方案:
- 方法一:使用
boxed()自动装箱boxed()会把IntStream中的每个int自动装箱为Integer,将流转换为Stream<Integer>,之后用toArray(Integer[]::new)生成目标类型的数组:
Integer[] arr = new Random().ints(1, 100) .distinct() .limit(10) .boxed() .toArray(Integer[]::new);
- 方法二:用
mapToObj()手动装箱
如果需要更明确的装箱逻辑,可以调用mapToObj()指定Integer的构造或valueOf方法,效果和boxed()完全一致:
Integer[] arr = new Random().ints(1, 100) .distinct() .limit(10) .mapToObj(Integer::valueOf) .toArray(Integer[]::new);
内容的提问来源于stack exchange,提问作者notaorb
相关产品推荐
相关产品推荐

