在Java 8中成对组合两个数组的优雅方式

Myo*_*yon 5 java arrays java-8 java-stream

我想用a组合两个通用数组BiFunction.在这里你看到了天真的实现:

<A,B,C> C[] combine(A[] as, B[] bs, BiFunction<A,B,C> op) {
    if (as.length == bs.length) {
        C[] cs = (C[]) new Object[as.length];
        for(int i = 0; i < as.length; i++) {
            cs[i] = op.apply(as[i], bs[i]);
        }
        return cs;
    } else {
        throw new IllegalArgumentException();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种更优雅的方式来做这个没有for循环 - 也许使用Java 8Stream.我很高兴你的建议.

Fed*_*ner 5

你可以使用Arrays.setAll方法:

C[] cs = (C[]) new Object[as.length];
Arrays.setAll(cs, i -> op.apply(as[i], bs[i]));
Run Code Online (Sandbox Code Playgroud)

或者,如果op计算成本非常高,您也可以使用Arrays.parallelSetAll.