Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8将两个int数组的所有值相加_Java_Java 8_Java Stream - Fatal编程技术网

Java8将两个int数组的所有值相加

Java8将两个int数组的所有值相加,java,java-8,java-stream,Java,Java 8,Java Stream,输出: int[] ar1 = {1,2,3}; int[] ar2 = {1,2,3}; System.out.println(Arrays.toString ( IntStream.range(0,ar1.length) .flatMap(x -> IntStream.range(0,ar2.length).map(y -> ar1[x]+ar2[y])) .toArray ())); 我试过这样的方法: {2,3,

输出:

int[] ar1 = {1,2,3};
int[] ar2 = {1,2,3};
System.out.println(Arrays.toString (
    IntStream.range(0,ar1.length)
             .flatMap(x -> IntStream.range(0,ar2.length).map(y -> ar1[x]+ar2[y]))
             .toArray ()));
我试过这样的方法:

{2,3,4,3,4,5,4,5,6}
但这不起作用:

类型不匹配:无法从
IntStream
转换为
int


如何使用streams将Java 8中
ar1
的每个值与
ar2
的每个值相加?

您应该使用
flatMap
,因为
IntStream
map
被期望将原始
IntStream
的每个
int
元素映射到
int
,不是一个
IntStream

IntStream.range(0,ar1.length).map(x -> IntStream.range(0,ar2.length).map(y -> ar1[y]+ar2[x]));
输出:

int[] ar1 = {1,2,3};
int[] ar2 = {1,2,3};
System.out.println(Arrays.toString (
    IntStream.range(0,ar1.length)
             .flatMap(x -> IntStream.range(0,ar2.length).map(y -> ar1[x]+ar2[y]))
             .toArray ()));
除了创建数组索引的
IntStream
,还可以创建数组元素的
IntStream

[2, 3, 4, 3, 4, 5, 4, 5, 6]

对于每个
i
th元素,您可以创建此元素的
i+j
和另一个数组的
j
th元素的
IntStream

System.out.println(Arrays.toString (
    Arrays.stream(ar1)
          .flatMap(x -> Arrays.stream(ar2).map(y -> x + y))
          .toArray ()));
我不建议使用索引流(
IntStream.range(0,ar1.length)
),它们可以被值流本身所取代(
IntStream.of(ar1)
)。

除了的索引流之外,您可以使用创建
IntStream
。例如:

IntStream.of(ar1).flatMap(i -> IntStream.of(ar2).map(j -> i + j)).toArray();

我不明白为什么要创建索引流而不是索引流values@AndrewTobilko我用.range()测试了一些东西:)@DaftLeech,在这里测试
range
不是一个好例子:)为什么像这样的流比双嵌套for循环更受欢迎?我知道它们是强大的工具,但我不认为它们有用。我信任使用它们的许多有经验的人,但我个人无法掌握。@corsiKa如果您有大量数据,运行时可以将流拆分为多个核心/线程,从而减少执行时间。对于这样的小数据集,与双嵌套循环相比,它们会导致开销,因为它们的设置时间更大,但在大数据集中,它们是有用的。