我有一个对象的ArrayList。这些对象有一个属性或数据类型是'String'。
我需要按照这个字符串对ArrayList进行排序。如何实现?
Comparator<MyObject>
并使用 Collections.sort(List<T>, Comparator<? super T>
来对你的 List
进行排序。MyObject
也可以实现 Comparable<MyObject>
,定义基于你特定属性比较的 自然顺序,接着可以使用 Collections.sort(List<T>
。
关于按不同标准排序 List
:
关于 Comparator
和 Comparable
如果您需要按对象的多个属性进行排序,那么另一种更灵活的方法是使用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));
import static java.util.Comparator.comparing;
...
people.sort(comparing(Person::getLastName));
people.sort(comparing(Person::lastName))
。似乎你有点低估了它。 - ColinD