2016-10-14 42 views
-4

我有一個無法實現的比較器/可比界面對象的ArrayList。如何通過現場沒有比較排序對象的ArrayList /可比

的對象具有一個字段:「的SequenceNumber」是一個整數。我需要按照此字段的順序(從最低到最高)對ArrayList進行排序,而無需實現所提到的接口。

有一個簡單的方法來做到這一點,我可以手動編寫一個排序算法,但不知道是否有這樣做的,而搜索,我已經錯過了更有效的(更沒有錯誤的)方法是什麼?

注:使用Java 7

+1

是,使用比較 – ControlAltDel

+0

正如我在問題中提到的對象是無法實現比較 – BenParker93

+0

爲什麼你需要進行排序,而不使用那些2個接口?它們旨在幫助您分類。 – Ash

回答

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()); 
0

您可以使用引入lambda表達式Java8來排序對象而不實現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)); 
    } 
} 
+0

OP使用Java 7。 – Stephan