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

正好最近在项目开发中需要对保存在一个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/

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值