【问题标题】:Sort a Arraylist Object对 Arraylist 对象进行排序
【发布时间】:2019-11-24 19:46:18
【问题描述】:

我有数组列表

Arraylist<Class> arraylist = new Arraylist<>();

类包含不同的元素,如姓名、年龄、卷号。

我想对这个数组列表进行排序并使用

Collections.sort(arraylist);

并得到一个错误我怎样才能用卷号对这个数组列表进行排序。在安卓工作室中。

【问题讨论】:

    标签: java android sorting arraylist


    【解决方案1】:

    您需要Comparator&lt;Class&gt; 在排序操作期间比较元素。一个例子可能是:

    class ClassComparator implements Comparator<Class> {
    
        @Override
        public int compare(Class c1, Class c2) {
            // write comparison logic here like below , it's just a sample
            return c1.name.compareTo(c2.name);
        }
    }
    

    然后使用比较器作为

    Collections.sort(arraylist, new ClassComparator());
    



    做同样事情的另一种方法是在Class 类中实现Comparable 接口:

    class Class implements Comparable<Class> {
    
        public String name;
    
        @Override
        public int compareTo(Class o) {
            return name.compareTo(o.name);
        }
    }
    

    然后调用:

    Collections.sort(arraylist);
    

    【讨论】:

      【解决方案2】:

      您可以使用 lambda 函数 (Java 8),它不需要您实现 Comparable 类并且可以正确完成工作。

      一般语法:

      Collections.sort(students, (s1, s2) ->
              s1.getName().compareTo(s2.getName())); // for String values
      
      
      Collections.sort(students, (s1, s2) ->
              Integer.compare(s1.getRollNumber(), s2.getRollNumber())); // for Integral values
      

      ArrayList 将是:

      List<Student> students = new ArrayList<>();
      

      这是给班级的

      class Student{
          String name;
          int rollNumber;
      
          public String getName(){
              return name;
          }
      
          public int getRollNumber(){
              return rollNumber;
          }
      }
      

      【讨论】:

        【解决方案3】:

        您的班级,例如在排序之前应该是可排序的。 Collections.sort() 必须知道它应该按照什么标准对列表进行排序。除非您想显式实现 Comparable 或创建 Compratator(Java 8 之前的旧方式),否则您可以执行以下操作

        class Student {
            private int rollNumber;
            private String name;
        
            public int getRollNumber() {
                return rollNumber;
            }
        
            public void setRollNumber(int rollNumber) {
                this.rollNumber = rollNumber;
            }
        
            public String getName() {
                return name;
            }
        
            public void setName(String name) {
                this.name = name;
            }
        }
        

        然后您可以将列表排序为:

        Collections.sort(list, Comparator.comparingInt(Student::getRollNumber));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-17
          • 2014-11-09
          • 1970-01-01
          • 2013-01-06
          • 2015-12-27
          • 1970-01-01
          相关资源
          最近更新 更多