2014-11-04 70 views
-1

是否可以将数据从多个[] []复制到单个[]?!?将多个数组转换为单个数组(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} 
+0

你试过了什么?邮寄一些代码,你会怎么做。 – Icewind 2014-11-04 16:35:48

+0

仅供参考:在Java中,它通常写'double [] [] multi'而不是'double multi [] []'。既然你有一个double('double [] []')数组的数组,而不是一个多数组数组的数组)。 – GameDroids 2014-11-04 16:42:49

+0

@GameDroids - 实际上,只有一个变量被声明时,这两种形式是相同的。当在一行上声明多个变量时,会出现差异:'double multi [] [],single [];'声明'multi'是一个二维数组,'single'是一维数组;如果行以'double [] [] ...'开头,那么所有东西都是二维数组(或二维数组数组)。然而,你可以写:'double [] multi [],single;'来获得所需的声明。 (我不明白你对“多列数组阵列”的评论部分。) – 2014-11-04 16:49:46

回答

3

与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 
+0

好的解决方案。出于好奇(因为我还没有使用Java 8),这会正确处理'multi'元素为'null'吗? – 2014-11-04 16:55:27

+0

@TedHopp不会抛出NPE - 但你可以在'flatMapToDouble'之前添加一个'.filter(Objects.nonNull)'来跳过空条目。 – assylias 2014-11-04 17:30:03

0
+0

这是一个不正确的(或至少不完整的)解决方案。 'ArrayUtils.addAll'将返回一个新的数组,它是'array1'和'array2'的串联。 OP想要连接'multi'的所有元素。人们可以在'addAll'上构建一个一个地连接元素,但这是非常低效的。此外,'ArrayUtils'不是标准API的一部分;它需要使用第三方Apache Commons库。 – 2014-11-04 16:45:59

1

如果你要逻辑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]; 
    } 
} 
2

这是完全可能的。根据每个@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,你要新增内每个环适当的检查。

+0

大帮忙!!!非常感谢!!! – shamy 2014-11-04 17:17:37

相关问题