2015-11-05 42 views
0

我有一個多維數組,它包含以下數據:如何在Java中將多維數組劃分爲單維數組?

每個晚上都有一個維度,每個晚上都有一個日期和作業主題列表。它被設置這樣的:

HOMEWORK = new String[][]{ 
    {"TODAY; 5 November 2015", "Math, ILA, Science"}, 
    {"4 November 2015", "ILA, Science"}, 
    {"3 November 2015", "Math, ILA, Social Studies"} 
}; 

我怎樣才能得到這是日期和科目的兩個單維數組這樣?:

String[] dates, subjects; 
+3

你到目前爲止嘗試過什麼?我們可以解決特定的問題,但我們無法爲您寫作業。 –

+7

即使你的變量正在尖叫'家庭作業'。 – sam

+0

我試着循環數組,並將其轉換爲ArrayList,但它通過異常多次。 @AndyThomas –

回答

4

你可以做到以下幾點:

String[] dates = Arrays.stream(HOMEWORK).map(r -> r[0]).toArray(String[]::new); 
String[] subjects = Arrays.stream(HOMEWORK).map(r -> r[1]).toArray(String[]::new); 
+1

這些新流看起來很時髦,但似乎很有用 – phflack

0

開始通過構建東西放值時,可以使用陣列和手動成長陣列,或使用一些更有效和更容易像一個LinkedList或ArrayList的

然後從2D陣列將數據移動到臨時結構

最後,轉換臨時結構到您的期望陣列

List<String> dateList = new LinkedList<String>(); 
List<String> subjectsList = new LinkedList<String>(); 
for(String[] entry : HOMEWORK) 
{ 
    subjectsList.add(entry[0]; 
    dateList.add(entry[1]; 
} 
dates = dateList.toArray(new String[0]); 
subjects = subjectsList.toArray(new String[0]); 

此如果你的作業陣列確實是長度爲2數組的數組,如果它們是任何小於一個外的邊界時,將只工作會拋出異常

爲了防止這種情況,你可以使用if語句來檢查條目的長度

0

首先創建兩個String []來保存要查找的值。然後遍歷矩陣的每一行以複製它們。

String dates[] = new String[homework.length]; 
String subjects[] = new String[homework.length]; 
for (int i = 0; i < homework.length; ++i) { 
    dates[i] = homework[i][0]; 
    subjects[i] = homework[i][1]; 
} 

但是,你應該先自己試試看,顯示使用你的代碼,然後問。給你這個解決方案不會讓你學會編碼。 上面的代碼很簡單,試着理解它的工作原理。

0

我會說,使用傑夫莫林建議的流是要走的路。如果Java 8不可用,那麼您將不得不循環使用這種或那種方式。我非常好奇你將如何在代碼中使用這兩個一維數組。

個人而言,我可能會嘗試將其轉換爲一個地圖,這會給我更多的靈活性進一步的數據處理方面:

地圖homeworkMap = org.apache.commons.lang.ArrayUtils.toMap(家庭作業);

還有一件事。你不想格式化/標準化你的數據(你有'今日; 2015年11月5日'和'2015年11月4日',這對搜索來說將是一場噩夢)?