我想将EObject
List 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());
0 评论