在Java8中对多个数组使用流/函数编程

在Java8中对多个数组使用流/函数编程,java,functional-programming,java-8,java-stream,Java,Functional Programming,Java 8,Java Stream,我有两个数组,y和z 我想返回一个整数数组,其中result[I]=y[I]-z[I] 代码如下: static int[] join(int[] y, int[] z) { int[] result = new int[Math.min(y.length, z.length)]; for(int i = 0; i < result.length; ++i) { result[i] = y[i] - z[i]; } return result

我有两个数组,
y
z
我想返回一个整数数组,其中
result[I]=y[I]-z[I]

代码如下:

static int[] join(int[] y, int[] z) {
    int[] result = new int[Math.min(y.length, z.length)];
    for(int i = 0; i < result.length; ++i) {
        result[i] = y[i] - z[i];
    }
    return result;
}
静态int[]连接(int[]y,int[]z){
int[]结果=新的int[Math.min(y.length,z.length)];
对于(int i=0;i
不过,我想使用Java的8种函数式编程技术(如streams)做同样的事情。然而,我所知道的所有流函数一次只能用于一个列表

我该怎么做

编辑
另外,我如何做与我提到的相同的事情,但我想返回一个布尔数组,其中:
result[I]=y[I]==5 | | z[I]==10

您可以使用
IntStream
模拟使用计数器变量的迭代:

static int[] join(int[] y, int[] z) {
    int min = Math.min(y.length, z.length);
    return IntStream.range(0, min).map(i -> y[i] - z[i]).toArray();
}
不幸的是,如果结果是
布尔[]
,则无法执行此操作,因为
数组的原语专门化。setAll
仅为通常的
int
long
double
提供

但是这里没有魔法
Arrays.setAll
只使用
IntStream.range()
对所有数组索引执行聚合操作。因此:

static boolean[] join(int[] y, int[] z) {
    boolean[] result = new boolean[Math.min(y.length, z.length)];
    IntStream.range(0, result.length)
             .forEach(i -> result[i] = y[i] == 5 || z[i] == 10);
    return result;
}

如果我想返回一个布尔数组(参见编辑后的问题),怎么样。到目前为止,这是一个很好的解决方案@YahyaUddin对于
boolean[]
结果,
For
循环方法更可取,因为没有
BoolStream
,据我所知,无法轻松地将
转换为
boolean[]
。通常是并行列表/数组。为什么没有一个类似于
类YZ{int y,z;}
的数组,比如
YZ[]
(或者更好的
List
)?为什么需要生成的
int[]
boolean[]
数组?你打算如何进一步使用它?通常,只有在低级数学库(如矩阵处理)中使用并行阵列是可行的,在这些库中,切换到流似乎是不必要的。。。
    Arrays.setAll(result, i -> y[i] - z[i]);
static boolean[] join(int[] y, int[] z) {
    boolean[] result = new boolean[Math.min(y.length, z.length)];
    IntStream.range(0, result.length)
             .forEach(i -> result[i] = y[i] == 5 || z[i] == 10);
    return result;
}