我有一个物体的Arraylist。这些对象具有属性或数据类型 - 'String'。 我需要按字符串对Arraylist进行排序。怎么做到这一点?
答案 0 :(得分:13)
您需要撰写Comparator<MyObject>
并使用Collections.sort(List<T>, Comparator<? super T>
对List
进行排序。
或者,您的MyObject
也可以implements Comparable<MyObject>
,定义自然排序,对您的特定属性进行比较,然后使用Collections.sort(List<T>
。
根据各种标准对List
进行排序:
在Comparator
和Comparable
答案 1 :(得分:6)
如果您希望排序的对象的多个属性是使用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();
}
}));
以上将按名字对列表进行排序。
为了使其更好阅读,您可能希望定义可能要用作public static final
类上的Person
字段的函数。然后你可以按照这样的姓氏排序:
Collections.sort(people, Ordering.natural().onResultOf(Person.GET_LAST_NAME));
作为一个有趣的注释,在Java 8中使用lambda表达式和方法引用将会更容易。你将能够编写这样的东西,而不必定义任何笨拙的匿名内部类或静态最终字段:
import static java.util.Comparator.comparing;
...
people.sort(comparing(Person::getLastName));