基于日期(每小时)的对象组列表

时间:2018-01-09 07:07:25

标签: java arraylist java-8

我有一个Objects列表,其中java.util.date为其中一个字段。如何根据日期(每小时)分隔/过滤Objects。例如:日期范围为12.00到13:00的Objects应该分开或形成一个新列表,依此类推每小时。帮助我实现这一目标。

3 个答案:

答案 0 :(得分:5)

您可以流式传输原始对象列表,然后使用groupingBy收集器。

这将为您提供Map,其中键是小时,值是该小时的对象列表。

List<MyObject> objects = new ArrayList<>();

Map<Integer, List<MyObject>> objectsPerHour = objects.stream()
        .collect(Collectors.groupingBy(MyObject::getHour));

我假设MyObject的实现方式(您可以按照自己的意愿实现getHour()):

class MyObject {

    private Date date;

    public int getHour() {
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).getHour();
    }
}

答案 1 :(得分:1)

尝试以下:

List<MyClass> yourFinalList = list.stream().filter(x -> Integer.parseInt(new SimpleDateFormat("HH").format(x.getDate())) >= 12 && Integer.parseInt(new SimpleDateFormat("HH").format(x.getDate())) <= 13).collect(Collectors.toList());

        System.out.println(yourFinalList.size());

希望你的课程如下:

public class MyClass {
    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    Date date;
}

答案 2 :(得分:0)

public class DateComparator implements Comparator<XYZ> {
    public int compare(XYZ obj1, XYZ obj2) {
        if (obj1.getDate().before(obj2.getDate()) {
            return -1;
        } else if (obj1.getDate().after(obj2.getDate()) {
            return 1;
        } else {
            return 0;
        }        
    }
}