有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个Objects列表,其中java.util.date是其中一个字段。如何根据日期(每小时)分离/过滤Objects。例如:日期范围为12:00到13:00的Objects应分开,或形成一个新的列表,以此类推,每小时一次。帮我做到这一点


共 (3) 个答案

  1. # 1 楼答案

    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;
            }        
        }
    }
    
  2. # 2 楼答案

    您可以对原始对象列表进行流式处理,然后使用^{}收集器

    这将为您提供一个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();
        }
    }
    
  3. # 3 楼答案

    请尝试以下内容:

    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;
    }