为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

30秒到达战场 2023-06-08 19:54:52
我有一个对象的 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;    }
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

尝试这样的事情:


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;

}


查看完整回答
反对 回复 2023-06-08
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

我创建了以下示例,


public class Timings {


    private LocalDate date;

    private int hour;


    public Timings(LocalDate date, int hour) {

        this.date = date;

        this.hour = hour;

    }


    public LocalDate getDate() {

        return date;

    }


    public int getHour() {

        return hour;

    }


    @Override

    public String toString() {

        return "Timings{" +

                "date=" + date +

                ", hour=" + hour +

                '}';

    }

}

public class Sorting {


    public static void main(String[] args) {


        LocalDate date = LocalDate.of(2015, 02, 20);

        LocalDate date1 = LocalDate.of(2018, 07, 12);

        LocalDate date2 = LocalDate.of(2017, 05, 10);


        Timings timings = new Timings(date, 10);

        Timings timings1 = new Timings(date1, 8);

        Timings timings2 = new Timings(date2, 12);


        List<Timings> dateList = List.of(timings, timings1, timings2);


        List<Timings> newList = dateList.stream()

                .sorted( (a1, a2) -> a1.getDate().compareTo(a2.getDate()))

                .sorted(Comparator.comparingInt(Timings::getHour))

                .collect(Collectors.toList());


        System.out.printf(newList);


    }

}

在上面,第一种排序方法负责根据日期进行排序。第二个按小时照顾。


我得到以下输出


[Timings{date=2018-07-12, hour=8}, Timings{date=2015-02-20, hour=10}, Timings{date=2017-05-10, hour=12}]



查看完整回答
反对 回复 2023-06-08
  • 2 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信