Daf*_*ech 16 java java-8 java-stream
int[] ar1 = {1,2,3};
int[] ar2 = {1,2,3};
Run Code Online (Sandbox Code Playgroud)
输出:
{2,3,4,3,4,5,4,5,6}
Run Code Online (Sandbox Code Playgroud)
我试过这样的事情:
IntStream.range(0,ar1.length).map(x -> IntStream.range(0,ar2.length).map(y -> ar1[y]+ar2[x]));
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
类型不匹配:无法转换
IntStream为int.
如何使用流将Java 8中的每个值ar1与每个值相加ar2?
Era*_*ran 14
您应该使用flatMap,因为map的IntStream预计每个地图int的原始元素IntStream一个int,而不是一个IntStream.
System.out.println(Arrays.toString (
IntStream.range(0,ar1.length)
.flatMap(x -> IntStream.range(0,ar2.length).map(y -> ar1[x]+ar2[y]))
.toArray ()));
Run Code Online (Sandbox Code Playgroud)
输出:
[2, 3, 4, 3, 4, 5, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
作为创建IntStream数组索引的替代方法,您可以创建IntStream数组的元素:
System.out.println(Arrays.toString (
Arrays.stream(ar1)
.flatMap(x -> Arrays.stream(ar2).map(y -> x + y))
.toArray ()));
Run Code Online (Sandbox Code Playgroud)
对于每个i元素,您可以创建此元素IntStream的总和i + j以及j另一个数组的th元素:
IntStream.of(ar1).flatMap(i -> IntStream.of(ar2).map(j -> i + j)).toArray();
Run Code Online (Sandbox Code Playgroud)
我不建议使用索引流(IntStream.range(0,ar1.length)),它们可以用值本身(IntStream.of(ar1))流替换.
除了IntStream#flatMap之外,您还可以使用Arrays#stream(int [])来创建IntStream.例如:
int[] sum = Arrays.stream(ar1)
.flatMap(left -> Arrays.stream(ar2).map(right -> left + right))
.toArray();
System.out.println(Arrays.toString(sum));
// ^--- [2, 3, 4, 3, 4, 5, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)