拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何对List的元素进行排序?

如何对List的元素进行排序?

白鹭 - 2022-01-25 2088 0 0

我想将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());
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *