使用以下代码,我得到以下编译错误。我还尝试使用输入作为整数列表,而不是int[],这样做效果很好。如果我使用box(),它也可以正常工作。
我的问题真的是如果Int Stream必须是整数流,以及如何处理错误消息“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无法应用于给定的类型;必需:java.util.function.供应商,java.util.function.ObjInt消费者,java.util.function.Bi消费者找到:java.util.stream.收集器
我还尝试使用输入作为整数列表,而不是int[],这样做效果很好。如果我使用boxed()
所以,这基本上意味着你已经尝试过:
List<int[]> result1 = numbers.stream()
.flatMap(chara -> numbers.stream()
.map(operand -> new int[]{1, 2}))
.collect(Collectors.toList());
给定的数字是一个列表
和:
List<int[]> result1 = Arrays.stream(numbers)
.boxed()
.flatMap(chara -> Arrays.stream(numbers).boxed()
.map(operand -> new int[]{1, 2}))
.collect(Collectors.toList());
给定的数字是一个整数。
是的,这确实可以编译,但根本不可读,而且肯定有更好的方法来生成相同的结果(稍后将在文章中显示)。
至于编译错误,那是因为数组。流(数字)生成一个IntStream
,您试图将映射到引用类型(
int[]
),而不是映射到IntStream
函数所期望的基元int
。即使您要通过执行数组来解决这个问题。流(数字)。装箱()代码>接下来还有另一个问题。
您的代码主要做的是:
Stream.generate(() -> new int[]{1, 2})
.limit(numbers.length * numbers.length)
.collect(Collectors.toList());
或:
IntStream.rangeClosed(1, numbers.length * numbers.length)
.mapToObj(n -> new int[]{1, 2})
.collect(Collectors.toList());
而是以一种更地道、更易读、更高效的方式。