我有一个带有一些String参数的类.我从这个对象中创建了一个实例列表.然后我做了一个比较器排序功能,按不同的主题对列表进行排序.例如,通过StartTime或EndTime.时间以字符串格式定义.这是sort的比较函数:
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;
}
});
}
Run Code Online (Sandbox Code Playgroud)
它工作,但当我用>或<或<=符号更改比较器时,它将无法工作!或者当我将它们与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;
}
});
}
Run Code Online (Sandbox Code Playgroud)
我真的不知道它有什么问题!!!!!!!
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;
.....
}
Run Code Online (Sandbox Code Playgroud)
这里有一些数据
57779.999999999999 57779.999999999956 57778.99999999999985 57778.99999999994 57777.99999999993 57778.99999999988 57777.0 57777.0 57750.0 57749.99999999994 57734.99999999994 57734.99999999988 57719.999999999985 57719.999999999985
你对比较器的理解是错误的.
当事情平等时,他们应该返回-1,1和0.因此,使用<=并且返回-1或1的当前比较是不正确的.
相反,您必须实现以下逻辑:
比较它的两个参数的顺序.返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数.
换句话说:您的第一个实现可能适用于您测试过的数据; 但这是不正确的; 并且反转逻辑并不能解决这个问题.
最后:这里的答案很简单; 只需在比较器中使用Double.compare().比较浮点数实际上是一个棘手的业务.
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |