java 8 将两个 int 数组的所有值相互求和

2022-09-03 05:04:40
int[] ar1 = {1,2,3};
int[] ar2 = {1,2,3};

输出:

{2,3,4,3,4,5,4,5,6}

我尝试了这样的东西:

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

但这不起作用:

类型不匹配:无法从 转换为 。IntStreamint

如何使用流将 Java 8 中的每个值与 的每个值相加?ar1ar2


答案 1

您应该使用 ,因为 应该将原始元素的每个元素映射到 一个 ,而不是映射到 一个 。flatMapmapIntStreamintIntStreamintIntStream

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]

作为创建数组索引的替代方法,您可以创建数组的元素之一:IntStreamIntStream

System.out.println(Arrays.toString (
    Arrays.stream(ar1)
          .flatMap(x -> Arrays.stream(ar2).map(y -> x + y))
          .toArray ()));

答案 2

对于第 4 个元素,可以创建此元素的总和和另一个数组的第 1 个元素:iIntStreami + jj

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

我不建议使用索引流(),因为它们可以用值流本身替换()。IntStream.range(0,ar1.length)IntStream.of(ar1)


推荐