我读过关于使用比较器对ArrayList进行排序的文章,但在人们使用的所有示例中 compareTo
根据一些研究,这是一种用于字符串的方法。
我想按自定义对象的属性之一对其arraylist进行排序:日期对象( 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);
...
}
29条答案
按热度按时间k0pti3hp16#
您可以使用bean比较器对自定义类中的任何属性进行排序。
5lwkijsr17#
Java8Lambda缩短了排序。
aoyhnmkz18#
从…起
Java 8
从那时起,我们不必使用Collections.sort()
直接的。List
接口有一个默认值sort()
方法:看见http://visvv.blogspot.in/2016/01/sorting-objects-in-java-8.html.
czq61nw119#
您可以使用Java8进行排序
aiazj4mn20#
函数和方法参考
这个
Collections.sort
方法可以对List
使用Comparator
你通过了。那个Comparator
可以使用Comparator.comparing
方法,其中可以根据需要传递方法引用Function
. 幸运的是,实际的代码比这个描述简单得多,也短得多。对于java 8:
或
另一种方法是
w6mmgewl21#
使用Java8的最佳简单方法是使用英文字母排序
类实现
分类
如果要对包含非英语字符的字母表进行排序,可以使用区域设置。。。下面的代码使用土耳其语字符排序。。。
类实现
分类
kgqe7b3p22#
ni65a41a23#
由于技术每天都在出现,答案会随着时间而改变。我看了一下lambdaj,看起来很有趣。
您可以尝试使用lambdaj解决这些任务。你可以在这里找到它:http://code.google.com/p/lambdaj/
这里有一个例子:
排序迭代
用lambda排序
当然,这种美观会影响性能(平均2倍),但是您能找到更可读的代码吗?
gj3fmq9x24#
使用java 8,您可以使用比较器的方法参考:
thtygnil25#
java 8 lambda表达式
或
bzzcjhmw26#
自从
Date
工具Comparable
,它有一个compareTo
方法就像String
做那你的习惯呢
Comparator
可能是这样的:这个
compare()
方法必须返回一个int
,因此您无法直接返回boolean
就像你计划的那样。您的排序代码将与您所写的大致相同:
如果您不需要重用比较器,那么编写所有这些的一种略短的方法是将其作为内联匿名类编写:
自java-8以来
现在,您可以使用lambda表达式为
Comparator
:及
List
有一个sort(Comparator)
方法,因此您可以进一步缩短:这是一个非常常见的习惯用法,有一个内置的方法来生成
Comparator
对于一个有Comparable
关键:所有这些都是等价形式。
zwghvu4y27#
是的,你可以。有两个选项用于比较项目,可比较接口和比较器接口。
这两个接口都允许不同的行为。comparable允许您使对象的行为与刚才描述的字符串类似(实际上,字符串实现了comparable)。第二个是comparator,它允许你做你要求做的事情。你可以这样做:
这将导致collections.sort方法使用comparator作为其排序机制。如果arraylist中的对象实现了comparable,则可以执行以下操作:
collections类包含许多有用的通用工具。
kokeuurv28#
用于分类
ArrayList
您可以使用以下代码段:wr98u20j29#
具有自然排序顺序的类(例如,类编号)应实现可比较接口,而没有自然排序顺序的类(例如,类主席)应提供比较器(或匿名比较器类)。
两个例子:
用法: