如何在列表中对日期进行排序?

时间:2017-03-26 19:18:10

标签: java list sorting

我有一个对象列表。该列表已按预订日期排序。我想创建一个新的列表,以今天的日期作为参数,并存储截至今天的最后10个预订和接下来的10个预订。

如何做到这一点?

transaction = session.beginTransaction();

        String hql = "FROM Booking ORDER BY scheduledDate";
        Query query = session.createQuery(hql);
List<Booking> bookingList = query.list();
Date now = new Date();
        List<Booking> lessThan = null;
        List<Booking> moreThan = null;

        for(int i =0; i<bookingList.size();i++){

            if(bookingList.get(i).getScheduledDate().compareTo(now)<0)
                lessThan.add(bookingList.get(i));

            if (bookingList.get(i).getScheduledDate().compareTo(now)>0)
                moreThan.add(bookingList.get(i));
        }

这些是我的getter方法。

public java.util.Date getScheduledDate() {
    return scheduledDate;
}

2 个答案:

答案 0 :(得分:2)

通过获取当前日期与日期列表中每个日期的差异结果的绝对值来创建新列表。

在新列表中找到最小数字的位置。然后,您可以从此处获取所需日期的位置。 min-pos到(min-pos + 9)会给你10个下一个10个预订的记录,(min-pos - 1)到(min-pos - 10)会给你另一个。

结果将根据(今天的日期 - 日期 - 最小 - 位置)是否大于或小于零而略有不同。然后(min-pos + 1)到(min-pos + 10)会给你10个下一个10个预订的记录,(min-pos)到(min-pos - 9)会给你另一个

答案 1 :(得分:1)

您可以使用Java 8 stream轻松完成此操作,例如:

List<Booking> bookingList = query.list();
final Date today = new Date();
List<Booking> greaterThan = bookingList.stream()
        .filter(b -> b.getScheduledDate().after(today))
        .limit(10)
        .collect(Collectors.toList());

List<Booking> lessThan = bookingList.stream()
        .filter(b -> b.getScheduledDate().before(today))
        .limit(10)
        .collect(Collectors.toList());