首页 > 解决方案 > 使用 Streams 将 3 个数组转换为 1 个对象数组

问题描述

假设我有以下三个数组:

int r[] = {255,255,255};
int g[] = {0,0,0};
int b[] = {255,255,255};

所有数组都将具有相同的长度

我想将它们转换为Color类型的对象数组:

public class Color {
   int r,g,b;

   public Color(int r, int g, int b) {
        this.r = r;
        this.g = g;
        this.b = b;
   }

}

Color[] arr = new Color[3];

其中每个索引将包含来自 3 个数组的相同索引的 r、g、b。例如,让我们说Color[1] = new Color(r[1],g[1],b[1]);

如何使用 Java Streams 做到这一点?

代码的for循环变体是:

Color arr[] = new Color[r.length];

for(int i=0;i<r.length;i++) {
    Color c = new Color(r[i],g[i],b[i]);
    arr[i] = c;
}

有没有办法使用流来做到这一点?

标签: javaarraysjava-stream

解决方案


数组::setAll

演示:

import java.awt.Color;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int r[] = { 255, 255, 255 };
        int g[] = { 0, 0, 0 };
        int b[] = { 255, 255, 255 };
        Color[] arr = new Color[3];

        Arrays.setAll(arr, i -> new Color(r[i], g[i], b[i]));
        System.out.println(Arrays.toString(arr));
    }
}

或者,您可以使用IntStream:range进行迭代和填充arr

import java.awt.Color;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
       int r[] = { 255, 255, 255 };
       int g[] = { 0, 0, 0 };
       int b[] = { 255, 255, 255 };
       Color[] arr = new Color[3];

       IntStream.range(0, arr.length).forEach(i->arr[i] = new Color(r[i], g[i], b[i]));
    }
}

推荐阅读