gpt4 book ai didi

Java 使用比较器进行日期排序

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:30 25 4
gpt4 key购买 nike

我正在尝试对日期列表进行排序,但它不起作用。

这是AttemptEntity中的声明和获取函数

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "end_time")
private Date endTime;

public Date getEndTime() {
return endTime;
}

这是没有执行任何操作的排序代码。 GetAttempts() 获取所有调用尝试的列表。它们不按顺序排列,我只是希望能够获得具有最新结束时间的任何尝试。

        List<AttemptEntity> attempts = called.getAttempts();
Collections.sort(attempts, new Comparator<AttemptEntity>() {
@Override
public int compare(AttemptEntity a1, AttemptEntity a2) {
if (a1.getEndTime() == null || a2.getEndTime() == null)
return 0;
return a1.getEndTime().compareTo(a2.getEndTime());
}
});

我相信上面的代码应该对尝试进行排序,然后应该对尝试进行排序,因此最晚的结束时间将是 attempts.get(attempts.size()-1).getEndTime()

我尝试使用以下内容,但也根本没有进行任何排序。输入列表和输出列表完全相同。

Comparator<AttemptEntity> comparator = Comparator.comparing(AttemptEntity::getEndTime).reversed();
attempts.sort(comparator);

最佳答案

在我看来,您的代码中的一切都很好,因此请尝试使用您的代码,我可以对日期进行排序,如果您正在做与下面不同的事情,请告诉我:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

public class DateSorter {
static List<AttemptEntity> attempts = null;
public static void main(String[] args) {
prepareTestData();
System.out.println(attempts);
sortDates();
System.out.println(attempts);
}

private static void sortDates() {
Collections.sort(attempts, new Comparator<AttemptEntity>() {
@Override
public int compare(AttemptEntity a1, AttemptEntity a2) {
if (a1.getEndTime() == null){
return 0;
} else if(a2.getEndTime() == null){
return -1;
}
return a1.getEndTime().compareTo(a2.getEndTime());
}
});
}

private static void prepareTestData() {
attempts = new ArrayList<>();
attempts.add(new AttemptEntity(new Date(4444)));
attempts.add(new AttemptEntity(new Date(1111)));
attempts.add(new AttemptEntity(null));
attempts.add(new AttemptEntity(new Date(3333)));
attempts.add(new AttemptEntity(new Date(2222)));
}
}

测试 POJO:

import java.util.Date;

public class AttemptEntity {

private Date endTime;

AttemptEntity(Date date){
endTime = date;
}

public Date getEndTime() {
return endTime;
}

@Override
public String toString() {
return endTime == null ? null : endTime.toString();
}

}

最终输出:

[Thu Jan 01 05:30:04 IST 1970, Thu Jan 01 05:30:01 IST 1970, null, Thu Jan 01 05:30:03 IST 1970, Thu Jan 01 05:30:02 IST 1970]
[Thu Jan 01 05:30:01 IST 1970, Thu Jan 01 05:30:02 IST 1970, Thu Jan 01 05:30:03 IST 1970, Thu Jan 01 05:30:04 IST 1970, null]
<小时/>

更新:看起来某些 NULL 日期可能会导致一些排序问题,我已经更新了上面代码中的 compare 方法。

关于Java 使用比较器进行日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43721177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com