提问者:小点点

Java8整数流Vs IntStream


使用以下代码,我得到以下编译错误。我还尝试使用输入作为整数列表,而不是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.收集器


共1个答案

匿名用户

我还尝试使用输入作为整数列表,而不是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());

而是以一种更地道、更易读、更高效的方式。