我有一个带有一些字符串参数的类。我从这个对象制作了一个实例列表。然后我做了一个比较器排序函数来按不同的主题对列表进行排序。例如通过 StartTime 或 EndTime。时间以字符串格式定义。这是排序的比较函数:
if (sortType == Sort.STARTTIME){
Collections.sort(routeList, new Comparator<Route>() {
@Override
public int compare(Route o1, Route o2) {
if (Double.parseDouble(o1.getTimeS()) >= (Double.parseDouble(o2.getTimeS())))
return 1;
else
return -1;
}
});
}
它可以工作,但是当我用 > 或 < 或 <= 符号更改比较器时,它将无法工作!或者当我将它们与 endTime 进行比较时,则仅适用于 <= 并且我无法按递增顺序对其进行排序!!!!即使我无法更改 ot 1 和 -1 的位置。
if (sortType == Sort.ENDTIME){
Collections.sort(routeList, new Comparator<Route>() {
@Override
public int compare(Route o1, Route o2) {
if ((Double.parseDouble(o1.getTimeE()) <= Double.parseDouble(o2.getTimeE()))))
return 1;
else
return -1;
}
});
}
我真的不知道这是怎么回事!!!!!!!!!
public class Route extends Arc {
private String type;
private int secId;
private String tId;
private int event;
private String name;
private String nameS;
}
private String nameE;
private String timeS;
private String timeE;
.....
}
还有几行数据
57779.999999999985 57779.999999999956 57778.999999999985 57778.99999999994 57778.99999999993 57778.99999999988 57777.0 57777.0 57750.0 57749.99999999994 57734.99999999994 57734.99999999988 57719.999999999985 57719.999999999985
最佳答案
您对comparators的理解是错误的。
当条件相等时,它们应该返回 -1、1 和 0。因此,您当前使用 <= 进行比较并返回 -1 或 1 是不正确的。
相反,您必须实现这样的逻辑:
比较其两个参数的顺序。当第一个参数小于、等于或大于第二个参数时,返回负整数、零或正整数。
换句话说:您的第一个实现可能适用于您测试的数据;但这是不正确的;并且颠倒逻辑并不能解决这个问题。
最后:简单的答案在这里;只需使用 Double.compare()在你的比较器中。因为比较 float 实际上是一件棘手的事情。
关于java - 按参数排序和对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40555309/