是否可以将数据从多个[] []复制到单个[]?!?将多个数组转换为单个数组(java)
double multi[][] = { {1.0, 2.0}, {2.11, 204.00, 11.00, 34.00},{66.5,43.3,189.6}};
到
double single [] = {1.0, 2.0, 2.11, 204.00, 11.0, 66.5,43.3,189.6}
是否可以将数据从多个[] []复制到单个[]?!?将多个数组转换为单个数组(java)
double multi[][] = { {1.0, 2.0}, {2.11, 204.00, 11.00, 34.00},{66.5,43.3,189.6}};
到
double single [] = {1.0, 2.0, 2.11, 204.00, 11.0, 66.5,43.3,189.6}
与Java 8,你可以这样写:
double[] single = Arrays.stream(multi) //Creates a Stream<double[]>
.flatMapToDouble(Arrays::stream) //merges the arrays into a DoubleStream
.toArray(); //collects everything into a double[] array
好的解决方案。出于好奇(因为我还没有使用Java 8),这会正确处理'multi'元素为'null'吗? – 2014-11-04 16:55:27
@TedHopp不会抛出NPE - 但你可以在'flatMapToDouble'之前添加一个'.filter(Objects.nonNull)'来跳过空条目。 – assylias 2014-11-04 17:30:03
ArrayUtils.addAll(数组1,数组2)
这是一个不正确的(或至少不完整的)解决方案。 'ArrayUtils.addAll'将返回一个新的数组,它是'array1'和'array2'的串联。 OP想要连接'multi'的所有元素。人们可以在'addAll'上构建一个一个地连接元素,但这是非常低效的。此外,'ArrayUtils'不是标准API的一部分;它需要使用第三方Apache Commons库。 – 2014-11-04 16:45:59
如果你要逻辑way..first你必须要找到的MULTY数组内容的长度。而然后进行单[]与长度并添加值
double multy[][] = { {1.0, 2.0}, {2.11, 204.00, 11.00, 34.00},{66.5,43.3,189.6}};
int y=0;
for(int x=0;x<multy.length,x++){
for(int i=0;i<multy[x].length,i++){
y++;
}
}
double single [] =new double[y];
y=0;
for(int x=0;x<multy.length,x++){
for(int i=0;i<multy[x].length,i++){
y++;
single[y]==multy[x][i];
}
}
这是完全可能的。根据每个@assylias's answer,Java 8都有非常好的解决方案。如果您不使用Java 8,则必须手动完成一些工作。由于multi
元素的长度不同,因此最有效的做法是使用两次传递:第一次计算结果中需要多少元素,第二次实际复制分配数组后的元素:
int n = 0;
for (int[] elt : multi) {
n += elt.length;
}
double[] single = new double[n];
n = 0;
for (int[] elt : multi) {
System.arraycopy(elt, 0, single, n, elt.length);
n += elt.length;
}
如果在所有可能的multi
元素是null
,你要新增内每个环适当的检查。
大帮忙!!!非常感谢!!! – shamy 2014-11-04 17:17:37
你试过了什么?邮寄一些代码,你会怎么做。 – Icewind 2014-11-04 16:35:48
仅供参考:在Java中,它通常写'double [] [] multi'而不是'double multi [] []'。既然你有一个double('double [] []')数组的数组,而不是一个多数组数组的数组)。 – GameDroids 2014-11-04 16:42:49
@GameDroids - 实际上,只有一个变量被声明时,这两种形式是相同的。当在一行上声明多个变量时,会出现差异:'double multi [] [],single [];'声明'multi'是一个二维数组,'single'是一维数组;如果行以'double [] [] ...'开头,那么所有东西都是二维数组(或二维数组数组)。然而,你可以写:'double [] multi [],single;'来获得所需的声明。 (我不明白你对“多列数组阵列”的评论部分。) – 2014-11-04 16:49:46