您的位置:首页 > 编程语言 > Java开发

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

2017-01-15 22:35 871 查看
正好最近在项目开发中需要对保存在一个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());
});

// another way
persons.sort((p1, p2) -> p1.getName.compareTo(p2.getName));


Java中的对象排序都会跟
Comparable
Comparator
这两个接口扯上关系,网上已经有很多文章描述了,附文一篇,大家去看吧(实在不想重复造轮子的写,没那个时间):

http://www.journaldev.com/780/comparable-and-comparator-in-java-example

http://www.importnew.com/15259.html

https://sanaulla.info/2013/03/11/using-lambda-expression-to-sort-a-list-in-java-8-using-netbeans-lambda-support/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 排序