对按保持排序的值排序的数组列表进行排序

安德里亚·古里奥利

我有一个对象的 ArrayList,在每个对象中,我都有一个日期和一个小时,我已经将它们转换为 int 进行排序。我已经按日期对对象列表进行了排序,现在我想按保持日期排序的小时对相同的数组列表进行排序。

情况的一个小例子:

我有一个带有方法 getDateEvent() 和 getHourEvent() 的事件对象,它返回一个可排序的数据和小时值,如 YYYYMMDD 和 HHMM

一个已经按日期排序的事件数组列表,所以我必须按小时对数组列表进行排序,保持日期排序。

我的代码实际上是这样的:

private ArrayList<Evento> SortingHour(ArrayList<Evento> SortingList){
    int t=0;
    int counter=0;
    ArrayList<Evento> finale = new ArrayList<>();
    ArrayList<Evento>[] Array =  new ArrayList[SortingList.size()];
    while(counter<SortingList.size()){
        if( SortingList.get(counter).getDateEvent()).equals(SortingList.get(counter+1).getDateEvent()))) {
            Array[t].add(SortingList.get(counter));
            Array[t].add(SortingList.get(counter+1));
            counter++;

        }else{
            t++;
        Array[t].add(SortingList.get(counter));}

        counter++;
        }

            for(int c=0;c<t;c++) {
                for (int c1 = 0; c1 < Array[c].size(); c1++) {
                    for (int c2 = 0; c2 < Array[c].size(); c2++) {
                        if (Integer.parseInt(Array[c].get(c1).getHourEvent()) < Integer.parseInt(Array[c].get(c2).getHourEvent())) {
                            Collections.swap(Array[c], c1, c2);
                        }

                    }
                }
            }
        for(int c=0; c<t;c++){
            finale.addAll(Array[c]);
        }

    return finale;
    }
尤里·皮图利亚

尝试这样的事情:

public ArrayList<Item> sort(List<Item> list) {

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

    if (list!= null && list.size() != 0) {

      dateSort= new ArrayList<>(list);

      Collections.sort(
          dateSort, (o1, o2) -> Integer.compare(o1.getIntDate(), o2.getIntDate()));

      int currentDate = dateSort.get(0).getIntDate();

      ArrayList<Item> temp= new ArrayList<>();

      for (int i = 1; i < dateSort.size(); i++) {

        if (dateSort.get(i).getIntDate() > currentDate ) {
          currentDate = dateSort.get(i).getIntDate();
          result.addAll(timeSort(temp));
          temp.clear();
          temp.add(dateSort.get(i));
        }
        else{
          temp.add(dateSort.get(i));
        }

      }
    }
    return result;
  }

private ArrayList<Item> timeSort(List<Item> list) {

  ArrayList<Item> timeSort= new ArrayList<>();
  if (list!= null && list.size() != 0) {

      timeSort= new ArrayList<>(list);

      Collections.sort(
          timeSort, (o1, o2) -> Integer.compare(o1.getIntTime(), o2.getIntTime()));

  }

  return timeSort;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章