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如果您有大量数据,运行时可以将流拆分为多个核心/线程,从而减少执行时间。对于这样的小数据集,与双嵌套循环相比,它们会导致开销,因为它们的设置时间更大,但在大数据集中,它们是有用的。