Java8整数流与IntStream

Anu*_*ain 6 java java-8 java-stream

使用以下代码,我得到以下编译错误。我还尝试使用输入作为Integer列表而不是int [],并且它可以正常工作。如果我使用boxed(),它也可以正常工作。

我的问题确实是,如果Int Stream以及不是处理错误消息“ lambda表达式int []中的错误返回类型无法转换为int”,它必须是Integer流吗?

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());
}
Run Code Online (Sandbox Code Playgroud)

错误:(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(实际和形式)参数列表的长度不同)

Ous*_* D. 5

我还尝试使用输入作为整数列表,而不是int[]它可以正常工作。如果我使用boxed()也可以正常工作

因此,这实际上意味着您已经尝试过:

List<int[]> result1 = numbers.stream() 
                             .flatMap(chara -> numbers.stream()
                             .map(operand -> new int[]{1, 2}))
                             .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

给定的数字是List<Integer>

和:

List<int[]> result1 = Arrays.stream(numbers)
                            .boxed()
                            .flatMap(chara -> Arrays.stream(numbers).boxed()
                            .map(operand -> new int[]{1, 2}))
                            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

给定的数字是int[]

是的,它确实可以编译,但是根本不可读,并且肯定有更好的方法来生成相同的结果(在后面的文章中显示)。

至于编译错误,那是因为Arrays.stream(numbers)生成了,IntStream而您正在尝试map使用引用类型(int[])而不是int函数IntStream#map期望的基本类型。即使您要通过这样做来解决该问题,Arrays.stream(numbers).boxed()..也仍然会遇到另一个问题。

您的代码几乎是这样做的:

Stream.generate(() -> new int[]{1, 2})
      .limit(numbers.length * numbers.length)
      .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

要么:

IntStream.rangeClosed(1, numbers.length * numbers.length)
         .mapToObj(n -> new int[]{1, 2})
         .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但以一种更加惯用可读有效的方式。