簡體   English   中英

在Java 8中成對組合兩個數組的優雅方式

[英]Elegant way to combine two arrays pairwise in Java 8

我喜歡通過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();
    }
}

我想知道是否有更優雅的方式來做這個沒有for循環 - 也許使用Java 8 Stream 我很高興你的建議。

您可以使用Arrays.setAll方法:

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

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

您可以使用IntStream.range生成索引,然后對其進行操作。

C[] cs = (C[])IntStream.range(0, as.length)
                       .mapToObj(i -> op.apply(as[i], bs[i]))
                       .toArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM