是否可以將數據從多個[] []複製到單個[]?!?將多個數組轉換爲單個數組(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