【发布时间】:2011-03-21 12:40:45
【问题描述】:
我有一个对象的 Arraylist。这些对象有一个属性或数据类型——“字符串”。 我需要按该字符串对 Arraylist 进行排序。如何做到这一点?
【问题讨论】:
标签: java string sorting arraylist
我有一个对象的 Arraylist。这些对象有一个属性或数据类型——“字符串”。 我需要按该字符串对 Arraylist 进行排序。如何做到这一点?
【问题讨论】:
标签: java string sorting arraylist
如果您可能希望对对象的多个属性进行排序,则另一种更灵活的好方法是使用Guava的Ordering类及其onResultOf(Function)选项.这非常适合按属性排序,因为 Function 可用于检索和返回对象的特定属性。
举个简单的例子,想象一个类Person 带有String getFirstName() 和String getLastName() 方法。
List<Person> people = ...;
Collections.sort(people, Ordering.natural().onResultOf(
new Function<Person, String>() {
public String apply(Person from) {
return from.getFirstName();
}
}));
上面将按名字对列表进行排序。
为了使它更好读,您可能需要在Person 类中定义您可能希望用作public static final 字段的函数。然后你可以像这样按姓氏排序:
Collections.sort(people, Ordering.natural().onResultOf(Person.GET_LAST_NAME));
顺便说一句,在 Java 8 中,使用 lambda 表达式和方法引用,这一切都会变得容易得多。您将能够编写类似这样的内容,而无需定义任何笨拙的匿名内部类或静态最终字段:
import static java.util.Comparator.comparing;
...
people.sort(comparing(Person::getLastName));
【讨论】:
people.sort(comparing(Person::lastName))。看起来你有点低估了它。
comparing 进行的编辑使其也非常简短易读。感谢您的提示。
您需要写一个Comparator<MyObject> 并使用Collections.sort(List<T>, Comparator<? super T> 对您的List 进行排序。
否则,您的MyObject 也可以implements Comparable<MyObject>,定义一个自然排序 来比较您的特定属性,然后改用Collections.sort(List<T>。
根据各种标准对List 进行排序:
开启Comparator 和Comparable
【讨论】: