java - 使用 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;
}
有没有办法使用流来做到这一点?
解决方案
数组::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]));
}
}
推荐阅读
- linux - 脚本在被 cron 或 udev 规则调用时不会下载文件
- angular - 面对“ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked”来显示/隐藏加载器
- c# - c#用户输入整数数组以查找特定数字
- python-3.x - 使用 Google Cloud Function 创建具有子目录路径的视频缩略图
- python - Tensorflow/Keras 模型输出是恒定的
- javascript - 以特定顺序重新排序 JS 对象
- r - 如何平均到 1 分钟
- java - 有没有更简单的方法在 Eclipse Oxygen (4.7.0) 中调试 Spring Boot
- typescript - 为什么我不能在 Typescript Map 上调用 keys()?
- mongodb - 带有聚合错误的 MongoDB Stitch/Realm 函数 updateMany