按参数排序和对象

omi*_*ami 3 java sorting

我有一个带有一些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

Gho*_*ica 6

你对比较器的理解是错误的.

当事情平等时,他们应该返回-1,1和0.因此,使用<=并且返回-1或1的当前比较是不正确的.

相反,您必须实现以下逻辑:

比较它的两个参数的顺序.返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数.

换句话说:您的第一个实现可能适用于您测试过的数据; 但这是不正确的; 并且反转逻辑并不能解决这个问题.

最后:这里的答案很简单; 只需在比较器中使用Double.compare().比较浮点数实际上是一个棘手的业务.