我有一個無法實現的比較器/可比界面對象的ArrayList。如何通過現場沒有比較排序對象的ArrayList /可比
的對象具有一個字段:「的SequenceNumber」是一個整數。我需要按照此字段的順序(從最低到最高)對ArrayList進行排序,而無需實現所提到的接口。
有一個簡單的方法來做到這一點,我可以手動編寫一個排序算法,但不知道是否有這樣做的,而搜索,我已經錯過了更有效的(更沒有錯誤的)方法是什麼?
注:使用Java 7
我有一個無法實現的比較器/可比界面對象的ArrayList。如何通過現場沒有比較排序對象的ArrayList /可比
的對象具有一個字段:「的SequenceNumber」是一個整數。我需要按照此字段的順序(從最低到最高)對ArrayList進行排序,而無需實現所提到的接口。
有一個簡單的方法來做到這一點,我可以手動編寫一個排序算法,但不知道是否有這樣做的,而搜索,我已經錯過了更有效的(更沒有錯誤的)方法是什麼?
注:使用Java 7
創建一個比較類來處理排序:
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());
您可以使用引入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));
}
}
OP使用Java 7。 – Stephan
是,使用比較 – ControlAltDel
正如我在問題中提到的對象是無法實現比較 – BenParker93
爲什麼你需要進行排序,而不使用那些2個接口?它們旨在幫助您分類。 – Ash