2016-11-10 127 views
-2

例如,我有一些日期日期的拆分陣列分成多個陣列

陣列

2016-11-11T12:13:14.120Z

2016-11-12T12:13:14.120Z

2016-11-13T12:13:14.120Z

2016-12-10T12:12:14.120Z

2016-12-10T12:13:14.120Z

2016-12-10T15:13:14.120Z

2016-12-11T12:13:14.120Z

2017-01-11T12:13:14.120Z

我需要實現類似此:

[[2016-11-11T12:13:14.120Z, 2016-11-12T12:13:14.120Z], [2016-11-13T12:13:14.120Z], [2016-12-10T12:12:14.120Z,2016-12-10T12:13:14.120Z,2016-12-10T15:13:14.120Z, 2016-12-11T12:13:14.120Z], [2017-01-11T12:13:14.120Z]] 

如果第一和n + 1之間的日期差爲小於24小時這個日期必須在陣列,否則 - 創建下一個陣列等。

我可以只寫類似的東西

int step = 24; 
    int currentPos = 0; 

ArrayList<ArrayList<Item>> result = new ArrayList<>(); 
    ArrayList<Item> currentArray = new ArrayList<>(); 

    for (int i = 0; i < items.size(); i++) { 
      Item item = items.get(currentPos); 
      for (int j = 0; j < items.size(); j++) { 
       int tmp = currentPos + 1; 
       if (DateUtils.getDifferenceInHours(item.getEndDate(), items.get(tmp).getEndDate()) <= step) { 
        currentArray.add(items.get(tmp)); 
        currentPos++; 
       } else { 
        currentArray.add(item); 
        result.add(currentArray); 
        currentArray = new ArrayList<>(); 
        currentPos++; 
        break; 
       } 

      } 
    } 

但我有IndexOutOfBoundsException異常 請幫助!

+0

你有什麼迄今所做?顯示你的代碼。 –

+0

@KNeerajLal我已經做了日期比較,但我不能寫一個正確的循環來實現正確的結果 –

+0

顯示您的代碼並嘗試解釋問題是什麼。 –

回答

0

這是一個簡單的例子與integers.I使用一個Set從結果中去除重複。

試試這個,

// Create sample ArrayList. Don't do this in your actual code. 
ArrayList<Integer> items = new ArrayList<Integer>() { 
    { 
     add(1); 
     add(2); 
     add(3); 
     add(2); 
     add(3); 
     add(2);     
     add(4);     
    } 
}; 

int step = 24; 
Set<ArrayList<Integer>> result = new HashSet<>();  

for (int i = 0; i < items.size(); i++) { 
    Integer item1 = items.get(i); 
    ArrayList<Integer> currentArray = new ArrayList<>(); 
    for (int j = 0; j < items.size(); j++) { 
     Integer item2 = items.get(j); 
     if (item1 == item2) { // This is where you need to find the difference of dates 
      currentArray.add(item1); 
     } 
    } 
    result.add(currentArray); 
} 

System.out.println(result); 

輸出,

[[4], [1], [3, 3], [2, 2, 2]] 
+1

謝謝,最後,它的工作原理! –

0

你的代碼改成這樣:

for (int i = 0; i < items.size(); i++) { 
     for (int item : items) { 
     for (int j = 0; j < items.size(); j++) { 
      int tmp = currentPos + 1; 
      if (DateUtils.getDifferenceInHours(item.getEndDate(), items.get(tmp).getEndDate()) <= step) { 
       currentArray.add(items.get(tmp)); 
       currentPos++; 
      } else { 
       currentArray.add(item); 
       result.add(currentArray); 
       currentArray = new ArrayList<>(); 
       currentPos++; 
       break; 
      } 

     } 
    } 
} 
+0

Item item = items.get(currentPos);在這一行上有索引越界異常 –

+0

我編輯了我的答案。 –

+0

最後一項數組遺失 –