我有手提电脑型号清单:
List<Lap> sortedListOfRacers = new ArrayList<>();
然后使用
Lap lap = new Lap(racer, start, end, Duration.between(start, end));
用不同的值填充此列表其中
start
和end
是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/