日期的拆分阵列分成多个阵列

问题描述:

例如,我有一些日期日期的拆分阵列分成多个阵列

阵列

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

显示您的代码并尝试解释问题是什么。 –

这是一个简单的例子与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

谢谢,最后,它的工作原理! –

你的代码改成这样:

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

最后一项数组遗失 –