根据 Java 集合成员项的“toString”值按字母顺序排序

2022-09-01 16:18:28

假设我有一个名为Foo的用户定义的Java类,例如:

public class Foo 
{

    private String aField;

    @Override
    public String toString()
    {
        return aField;
    }

}

以及诸如以下集合:

List<Foo> aList;

我想做的是根据每个成员返回的'.toString()'值按字母顺序对列表进行排序。

我尝试过使用 Collections.sort() 方法,但结果不是我尝试的。我需要做些什么才能完成此操作?


答案 1
Collections.sort(fooList,
                 new Comparator<Foo>()
                 {
                     public int compare(Foo f1, Foo f2)
                     {
                         return f1.toString().compareTo(f2.toString());
                     }        
                 });

假设 toString 从不返回 null,并且列表中没有 null 项。


答案 2

google-collections通过订购使这变得非常容易:

Collections.sort(list, Ordering.usingToString());

引入整个第三方库只是为了使用可以使用比较器(如其他人提供的那样)轻松编写的东西是否值得?不,但是Google收藏是如此酷,出于其他一系列原因,您无论如何都会想要拥有它。

在排序方面,您还可以轻松执行诸如反转之类的操作:

Ordering.usingToString().reverse();

或断开关系:

Ordering.usingToString().compound(someOtherComparator);

或处理空值:

Ordering.usingToString().nullsFirst();

等等,但是那里有很多东西(当然不仅仅是与排序相关的),这会导致真正富有表现力的代码。看看吧!


推荐