按对象属性排序对象的ArrayList
我有一个物体的Arraylist。 这些对象具有属性或数据类型 – ‘String’。 我需要通过该字符串对Arraylist进行排序。 怎么做到这一点?
您需要编写Comparator
并使用Collections.sort(List
对List
进行排序。
或者,您的MyObject
也可以implements Comparable
,定义一个比较特定属性的自然顺序 ,然后使用Collections.sort(List
代替。
也可以看看
- Java教程/对象排序
相关问题
关于各种标准的排序List
:
- 对联系人的ArrayList进行排序
论Comparator
与Comparable
- 何时使用Comparable vs Comparator
- compare()和compareTo()之间的区别
- 关于null的可比较和比较者合同
- 为什么Java Collections Framework提供了两种不同的排序方式?
如果您希望排序的对象的多个属性是使用Guava的Ordering类及其onResultOf(Function)
选项,那么执行此操作的另一个好方法是更灵活。 这非常适合按属性排序,因为Function可用于检索和返回对象的特定属性。 举一个简单的例子,假设一个Person
类具有String getFirstName()
和String getLastName()
方法。
List people = ...; Collections.sort(people, Ordering.natural().onResultOf( new Function() { 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));