java怎么进行自定义排序_java自定义对象进行排序

ddad09556f453ee522e3839df33bf30b.png

一、概述

我读过有关使用Comparator对ArrayList进行排序的内容。

我想按自定义对象的属性之一对ArrayList进行排序:Date对象(getStartDay())。通常,我将它们进行比较,item1.getStartDate().before(item2.getStartDate())因此我想知道是否可以编写如下内容:

public class CustomComparator {

public boolean compare(Object object1, Object object2) {

return object1.getStartDate().before(object2.getStartDate());

}

}

public class RandomName {

...

Collections.sort(Database.arrayList, new CustomComparator);

...

}

二、详解

自从Date实现以来Comparable,它就具有一种compareTo方法类似String类一样。

因此,您的自定义Comparator可能如下所示:

public class CustomComparator implements Comparator {

@Override

public int compare(MyObject o1, MyObject o2) {

return o1.getStartDate().compareTo(o2.getStartDate());

}

}

该compare()方法必须返回一个int,因此无论如何您都无法直接返回boolean。

您的排序代码几乎就像您写的那样:

Collections.sort(Database.arrayList, new CustomComparator());

所有这些内容的一种更短的方法是将其编写为内联匿名类:

Collections.sort(Database.arrayList, new Comparator() {

@Override

public int compare(MyObject o1, MyObject o2) {

return o1.getStartDate().compareTo(o2.getStartDate());

}

});

以来 Java-8

现在,您可以通过使用lambda表达式来以较短的形式编写最后一个示例Comparator:

Collections.sort(Database.arrayList,

(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));

并且List有一种sort(Comparator)方法,因此您可以进一步缩短此时间:

Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));

这是一个非常常见的习惯用法,有一个内置方法可以Comparator为带有Comparable键的类生成一个:

Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));

所有这些都是等效形式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值