我想將EObjectList wrt 中的元素按名稱升序排序。我嘗試使用以下代碼,但出現編譯器錯誤。
我試過:
List<EObject> list = new ArrayList<EObject>();
list.sort(Comparator.naturalOrder());
uj5u.com熱心網友回復:
EObject 必須是一個可比較的物件才能被 java 排序。在您的物件類定義中,您需要使用implements Comparable。然后,您需要使用一組引數覆寫可比較介面中的 compareTo() 方法,這些引數設定物件的排序先例。
uj5u.com熱心網友回復:
你可以用 Collections.sort(list, comparator)
下面是一個例子:
Collections.sort(list, (o1,o2)->o1.name.compareTo(o2.name));
uj5u.com熱心網友回復:
您可以通過以下兩種方式之一進行操作。
- 在您的類中實作 Comparable 介面。這為您的物件創建了自然排序。
public class EObject implements Comparable<EObject>{
private String name;
// perhaps other fields, constructors, and getters/setters
public EObject(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public int compareTo(EObject ob) {
// since you are comparing Strings, use String's compareTo method
return name.compareTo(ob.name);
}
public String toString() {
return name;
}
}
一些資料
List<EObject> list = new ArrayList<>(List.of(
new EObject("A"),
new EObject("X"),
new EObject("Y"),
new EObject("H"),
new EObject("F"),
new EObject("B"),
new EObject("G"),
new EObject("R"),
new EObject("S")));
list.sort(null); // null says use natural order
印刷
[A, B, F, G, H, R, S, X, Y]
這將扭轉您實施的自然順序
list.sort(Comparator.reverseOrder());
System.out.println(list);
印刷
[Y, X, S, R, H, G, F, B, A]
- 如果您還沒有實作 Comparable 介面,您可以像這樣執行上述操作。
list.sort(Comparator.comparing(EObject::getName));
// or for reversed order of names
list.sort(Comparator.comparing(EObject::getName).reversed());
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/397549.html
