java - 比较器类显示错误排序

标签 java list sorting arraylist comparator

我有一个填充有 DMatch 对象的列表,该对象包含属性“距离”。

我想要做的是根据“距离”对该列表进行升序或降序排序。

在下面的代码中,我使用了 Comparator 类并对列表进行了排序,但是索引(8,9,10,11)的输出没有很好地排序。

请让我知道我做错了什么以及如何纠正这个错误

代码:

    Collections.sort(list_RawMatchesMatDMatch, ascOrder);
                for (int i = 0; i < list_RawMatchesMatDMatch.size(); i++) {
                    Log.D(TAG, "main", "rawMatDMatchLiat(" + i + ").distance: " + list_RawMatchesMatDMatch.get(i).distance);                        
                }

    static Comparator<DMatch> ascOrder = new Comparator<DMatch>() {

    public int compare(DMatch arg0, DMatch arg1) {
        // TODO Auto-generated method stub

        return (int) (arg1.distance - arg0.distance);

    }
};

输出:

Debug: MainClass -> main: rawMatDMatchLiat(0).distance: 454.26645
Debug: MainClass -> main: rawMatDMatchLiat(1).distance: 447.3835
Debug: MainClass -> main: rawMatDMatchLiat(2).distance: 442.294
Debug: MainClass -> main: rawMatDMatchLiat(3).distance: 438.98862
Debug: MainClass -> main: rawMatDMatchLiat(4).distance: 433.11084
Debug: MainClass -> main: rawMatDMatchLiat(5).distance: 427.35114
Debug: MainClass -> main: rawMatDMatchLiat(6).distance: 426.2335
Debug: MainClass -> main: rawMatDMatchLiat(7).distance: 425.16232
Debug: MainClass -> main: rawMatDMatchLiat(8).distance: 423.816
Debug: MainClass -> main: rawMatDMatchLiat(9).distance: 423.6815
Debug: MainClass -> main: rawMatDMatchLiat(10).distance: 424.51855
Debug: MainClass -> main: rawMatDMatchLiat(11).distance: 424.66693
Debug: MainClass -> main: rawMatDMatchLiat(12).distance: 423.53986
Debug: MainClass -> main: rawMatDMatchLiat(13).distance: 423.79712
Debug: MainClass -> main: rawMatDMatchLiat(14).distance: 423.62012
Debug: MainClass -> main: rawMatDMatchLiat(15).distance: 421.72028
Debug: MainClass -> main: rawMatDMatchLiat(16).distance: 419.46274
Debug: MainClass -> main: rawMatDMatchLiat(17).distance: 418.12198

最佳答案

这不好:

return (int) (arg1.distance - arg0.distance);

因为 int 转换会截断结果。相反,请执行以下操作:

if (arg1.distance > arg0.distance) {
    return 1;
} else if (arg1.distance < arg0.distance) {
    return -1;
} else {
   return 0;
}

或者更好:

return Double.compare(arg1.distance, arg0.distance);

关于java - 比较器类显示错误排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29456804/

相关文章:

java - HBase 分区域负载均衡

python - 函数平方二维数组python

css - 如何在导航栏中放置背景

java - 我很困惑——这段代码总是有效吗?

javascript - 按键值对 JSON 响应进行排序

java - 如果 Hash<String,List<Object>> 的 List 中存在元素,如何返回键?

java - 迭代 2 个文件以删除任何公共(public)字符串行并分离出唯一字符串

java - 使用中序后继方法打印 BST 的时间复杂度

java - 使用 elasticsearch-hadoop map-reduce 将 json 从 HDFS 写入 Elasticsearch

根据自定义比较器排序