Java根据对象的某个字段排序

时间:2022-03-20 13:36:37

正好最近在项目开发中需要对保存在一个List中的对象根据其字段排序,遂总结一下吧,作为一个代码的搬运工,也是需要理解其原理的。

来一个简单的Person类:

public class Person {
private Long id;

private String name;

public Person(Long id, String name) {
this.id = id;
this.name = name;
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}

现在的需求是根据姓名的拼音首字母进行排序,看代码实现:

 @Test
public void testSort() {
Person p1 = new Person(1l, "周杰伦");
Person p2 = new Person(3l, "刘德华");
Person p3 = new Person(2l, "张学友");
Person p4 = new Person(4l, "成龙");
Person p5 = new Person(5l, "胶布虫");

List<Person> persons = Arrays.asList(p1, p2, p3, p4, p5);

Collections.sort(persons, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
Collator collator = Collator.getInstance(Locale.CHINA);
return collator.compare(o1.getName(), o2.getName());
}
});

}

使用Collections.sort方法,传一个Comparator实现类,比较对象字段实现compare方法。

反正我是比较喜欢lambda的写法(使用任何能让我少写代码的方法):

    Collections.sort(persons, (o1, o2) -> {
Collator collator = Collator.getInstance(Locale.CHINA);
return collator.compare(o1.getName(), o2.getName());
})
;

Java中的对象排序都会跟Comparable Comparator 这两个接口扯上关系,网上已经有很多文章描述了,附文一篇,大家去看吧(实在不想重复造*的写,没那个时间):
http://www.journaldev.com/780/comparable-and-comparator-in-java-example
http://www.importnew.com/15259.html