使用以下代码,我得到下面的编译错误。我还尝试使用输入作为Integer列表而不是int [],并且它可以正常工作。如果我使用boxed(),它也可以正常工作。
我的问题确实是,如果Int Stream是否必须是Integer流,以及处理错误消息“ lambda表达式int []中的错误返回类型无法转换为int”的错误处理是什么
public static void main(String[] args) {
int[] numbers = {1,2,3,4};
List<int[]> result1 = Arrays.stream(numbers).flatMap(chara -> Arrays.stream(numbers)
.map(operand -> new int[]{1, 2})).collect(Collectors.toList());
}
错误:(13,49)java:不兼容的类型:lambda中的返回类型错误 表达 int []无法转换为int错误:(13,66)java:接口java.util.stream.IntStream中的方法collection无法应用于 给定类型;需要: java.util.function.Supplier,java.util.function.ObjIntConsumer,java.util.function.BiConsumer 找到:java.util.stream.Collector>原因:无法推断 类型变量R (实际和正式论点列表的长度不同)
答案 0 :(得分:5)
我还尝试使用输入作为整数列表,而不是
int[]
和 与它工作正常。如果我使用boxed()也可以正常工作
所以,这实际上意味着您已经尝试过:
List<int[]> result1 = numbers.stream()
.flatMap(chara -> numbers.stream()
.map(operand -> new int[]{1, 2}))
.collect(Collectors.toList());
给定的数字是List<Integer>
。
和:
List<int[]> result1 = Arrays.stream(numbers)
.boxed()
.flatMap(chara -> Arrays.stream(numbers).boxed()
.map(operand -> new int[]{1, 2}))
.collect(Collectors.toList());
给定的数字是int[]
。
是的,它确实可以编译,但是根本不可读,并且肯定有更好的方法来生成相同的结果(在后面的文章中显示)。
至于编译错误,这是因为Arrays.stream(numbers)
生成了IntStream
,而您试图将map
改为引用类型(int[]
)而不是原始的{ int
的功能所期望的{1}}。即使您通过执行IntStream#map
来解决该问题,也仍然会遇到另一个问题。
您的代码几乎是这样做的:
Arrays.stream(numbers).boxed()..
或:
Stream.generate(() -> new int[]{1, 2})
.limit(numbers.length * numbers.length)
.collect(Collectors.toList());
,但以习惯用法,可读和有效的方式。