我有手提电脑型号清单:

List<Lap> sortedListOfRacers = new ArrayList<>();


然后使用Lap lap = new Lap(racer, start, end, Duration.between(start, end));用不同的值填充此列表

其中startend是LocalDateTime。

我有比较器:

public class TimeComparator implements Comparator<Lap> {


@Override
public int compare(Lap o1, Lap o2) {
    int digitOfReturnedValue = -2;

    Lap s1 = o1;
    Lap s2 = o2;
    if (s1.getTimeOfLap().equals(s2.getTimeOfLap())) {
        digitOfReturnedValue = 0;
    } else if (s2.getTimeOfLap().toMillis() < (s1.getTimeOfLap().toMillis())) {
        digitOfReturnedValue = 1;
    } else {
        digitOfReturnedValue = -1;
    }
    return digitOfReturnedValue;
}


Collections.sort(sortedListOfRacers, new TimeComparator());

它不会对所有值进行排序。

我想我的比较器错误,非常感谢您的帮助。

最佳答案

手动提取毫秒是没有意义的。 Duration已经具有可比性。

@Override
public int compare(Lap o1, Lap o2) {
    return Comparator.comparing(Lap::getTimeOfLap).compare(o1, o2);
}


值得注意的是,这会使您的TimeComparator基本无用,因为它几乎可以用相同数量的字符创建

new TimeComparator()
Comparator.comparing(Lap::getTimeOfLap)

关于java - 如何按持续时间对对象进行排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59771981/

10-15 21:55