我试图按日期从早到老排序。但我有奇怪的错误/错误//我不知道如何解释。我正在使用对象模型。这里是排序的代码
Collections.sort(models, new Comparator<Model>() {
@Override
public int compare(Model item1, Model item2) {
int s1 = (int) item1.getUpdateAt();
int s2 = (int) item2.getUpdateAt();
return (s2 - s1);
}
});
及其信息如何排序:
model: tyuiop time: 1484473575000
model: 0 time: 1516887006000
model: 1 time: 1516886848000
model: 2 time: 1516886840000
model: 3 time: 1516886833000
model: 4 time: 1516886825000
model: 5 time: 1516886818000
model: vhvyvtct time: 1516886592000
我们从0看到“vhvyvtctc”一切都很好,但“tyuiop”在错误的地方。我不明白为什么。可以帮我修复这个......错误吗?请
UPD Omg im idiot。真的是整数和长。我的头很傻。谢谢你们 将代码更改为此样式:
Collections.sort(models, new Comparator<Model>() {
@Override
public int compare(Model item1, Model item2) {
long s1 = item1.getUpdateAt();
long s2 = item2.getUpdateAt();
return Long.compare(s2, s1);
}
});
它的工作完美。谢谢你们。
答案 0 :(得分:1)
不要让事情变得复杂使用Long class的比较方法
Collections.sort(models, new Comparator<Model>() {
@Override
public int compare(Model item1, Model item2) {
return Long.compare(item1.getUpdateAt(), item2.getUpdateAt());
}
});
答案 1 :(得分:1)
如果使用某些调试信息运行代码,您可以看到长值无法正确解释为int值:
List<Long> longList = Arrays.asList(1516887006000L, 1516886848000L, 1516886840000L, 1516886833000L, 1516886825000L, 1516886818000L,
1516886592000L, 1484473575000L);
Collections.sort(longList, (o1, o2) -> {
System.out.println("Comparing: " + o1.intValue() + " with " + o2.intValue());
return (o2.intValue() - o1.intValue());
});
输出:
比较:763392512与763550512
比较:763384512与763392512
比较:763377512与763384512
比较:763369512与763377512
比较:763362512与763369512
比较:763136512与763362512
比较:-1585109416与763136512 比较:-1585109416与763377512
比较:-1585109416与763392512
比较:-1585109416与763550512
您可以看到值不正确。所以最好使用Long的比较:
Collections.sort(models, (o1, o2) -> {
return o1.getUpdateAt().compareTo(o2.getUpdateAt());
});