Android-java-如何按对象内的某个值对对象列表进行排序

发布于 2021-02-02 22:42:58

我试图按对象内的特定值对对象的数组列表进行排序。什么是做这种事情的最佳方法。我应该将Collections.sort()与某种比较器一起使用吗?

我试图用一个变量中包含的浮点值对对象列表进行排序。

编辑:这是我到目前为止:

public class CustomComparator implements Comparator<Marker> {
    @Override
    public int compare(Mark o1, Mark o2) {
        return o1.getDistance().compareTo(o2.getDistance());
    }
}

错误状态:无法在原始类型double上调用compareTo(double)。

是因为比较器不能返回某种类型以外的任何东西吗?

关注者
0
被浏览
304
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    如果你要查找默认排序,则应使用Comparable而不是Comparator。

    看到这里,这可能会有帮助- 类何时应该是Comparable和/或Comparator

    尝试这个

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class TestSort {
    
        public static void main(String args[]){
    
            ToSort toSort1 = new ToSort(new Float(3), "3");
            ToSort toSort2 = new ToSort(new Float(6), "6");
            ToSort toSort3 = new ToSort(new Float(9), "9");
            ToSort toSort4 = new ToSort(new Float(1), "1");
            ToSort toSort5 = new ToSort(new Float(5), "5");
            ToSort toSort6 = new ToSort(new Float(0), "0");
            ToSort toSort7 = new ToSort(new Float(3), "3");
            ToSort toSort8 = new ToSort(new Float(-3), "-3");
    
            List<ToSort> sortList = new ArrayList<ToSort>();
            sortList.add(toSort1);
            sortList.add(toSort2);
            sortList.add(toSort3);
            sortList.add(toSort4);
            sortList.add(toSort5);
            sortList.add(toSort6);
            sortList.add(toSort7);
            sortList.add(toSort8);
    
            Collections.sort(sortList);
    
            for(ToSort toSort : sortList){
                System.out.println(toSort.toString());
            }
        }
    
    }
    
    public class ToSort implements Comparable<ToSort> {
    
        private Float val;
        private String id;
    
        public ToSort(Float val, String id){
            this.val = val;
            this.id = id;
        }
    
        @Override
        public int compareTo(ToSort f) {
    
            if (val.floatValue() > f.val.floatValue()) {
                return 1;
            }
            else if (val.floatValue() <  f.val.floatValue()) {
                return -1;
            }
            else {
                return 0;
            }
    
        }
    
        @Override
        public String toString(){
            return this.id;
        }
    }
    


  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    按照此代码对任何ArrayList进行排序

    Collections.sort(myList, new Comparator<EmployeeClass>(){
        public int compare(EmployeeClass obj1, EmployeeClass obj2) {
            // ## Ascending order
            return obj1.firstName.compareToIgnoreCase(obj2.firstName); // To compare string values
            // return Integer.valueOf(obj1.empId).compareTo(Integer.valueOf(obj2.empId)); // To compare integer values
    
            // ## Descending order
            // return obj2.firstName.compareToIgnoreCase(obj1.firstName); // To compare string values
            // return Integer.valueOf(obj2.empId).compareTo(Integer.valueOf(obj1.empId)); // To compare integer values
            }
        });
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看