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