如何在没有Comparator / Comparable的情况下对对象的ArrayList进行排序

时间:2016-10-14 14:43:10

标签: java sorting object arraylist comparable

我有一个对象的arraylist无法实现Comparator / Comparable接口。

对象有一个字段:' SequenceNumber'这是一个整数。我需要按照这个字段(从最低到最高)的顺序对arraylist进行排序,而不实现上面提到的接口。

有没有一种简单的方法可以做到这一点,我可以手动编写一个排序算法,但想知道是否有一种更有效(而且更无错误)的方式来做这个我在搜索时错过了?

注意:使用Java 7.

2 个答案:

答案 0 :(得分:5)

创建一个比较器类来处理排序:

private class MyObjectComparator<MyObject> implements Comparator<MyObject> {

  /**
   * {@inheritDoc}
   */
  @Override
  public int compare(MyObject o1, MyObject o2) {
     return o2.getSequenceNumber() - o1.getSequenceNumber();
  }

}

然后用ArrayList对其进行排序:

Collections.sort(myArrayList, new MyObjectComparator());

答案 1 :(得分:0)

您可以使用Java8中引入的lambda表达式对对象进行排序,而无需实现Comparable / Comparator接口。

下面是使用lambda排序和显示对象的代码片段。

class Student
{  
    int id;  
    String name;  

    public Student(int id, String name) 
    {  
        this.id = id;  
        this.name = name;  
    }
    public  String toString()
    {
        return id +" " +name;
    }
}
public class SortDemo 
{
    public static void main(String[] args) 
    {
        List<Student> list=new ArrayList<Student>();  

        //Adding Objects  
        list.add(new Student(1,"XYZ"));  
        list.add(new Student(3,"ABC"));  
        list.add(new Student(2,"PQR"));  

        System.out.println("Sorting on the basis of name...");  

        // implementing lambda expression  
        Collections.sort(list,(p1,p2)->{return p1.name.compareTo(p2.name);});  

        list.forEach((s)->System.out.println(s));
    }
}