按属性排序自定义对象的ArrayList [英] Sort ArrayList of custom Objects by property
问题描述
compareTo
根据一些研究是Strings的一种方法。 我想通过其中一个属性来排序一个自定义对象的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);
...
}
自 日期
实施 可比较
,它有一个
compareTo
方法,就像 String
一样。
所以你的自定义 比较器
可能如下所示:
public class CustomComparator implements比较器< MyObject> {
@Override
public int compare(MyObject o1,MyObject o2){
return o1.getStartDate()。compareTo(o2.getStartDate());
}
}
compare() / code>方法必须返回一个
int
,所以你不能像你一样直接返回一个 boolean
你的排序代码就像你写的一样:
Collections.sort(Database.arrayList,new CustomComparator());
如果您不需要重复使用比较器,则稍短一些的方法来编写所有这些,是将它写成一个内联匿名类:
Collections.sort(Database.arrayList,new Comparator< MyObject>(){
@Override
public int compare(MyObject o1,MyObject o2){
return o1.getStartDate()。compareTo(o2.getStartDate());
}
} );
由于 java-8
现在,您可以使用 lambda表达式来编写较短格式的最后一个示例/ a>对于比较器
:
Collections.sort(Database。 arrayList,
(o1,o2) - > o1.getStartDate()。compareTo(o2.getStartDate()));
和列表
有一个 sort(Comparator)
方法,所以你可以进一步缩短这一点:
Database.arrayList.sort ((o1,o2) - > o1.getStartDate()。compareTo(o2.getStartDate()));
这是一个常见的成语,有一个内置方法生成一个
键:可比较
键的课程的比较器
Database.arrayList.sort(Comparator.comparing(MyObject :: getStartDate));
所有这些都是等效的表格。
I read about sorting ArrayLists using a Comparator but in all of the examples people used compareTo
which according to some research is a method for Strings.
I wanted to sort an ArrayList of custom objects by one of their properties: a Date object
(getStartDay()
). Normally I compare them by item1.getStartDate().before(item2.getStartDate())
so I was wondering whether I could write something like:
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);
...
}
Since Date
implements Comparable
, it has a compareTo
method just like String
does.
So your custom Comparator
could look like this:
public class CustomComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
}
The compare()
method must return an int
, so you couldn't directly return a boolean
like you were planning to anyway.
Your sorting code would be just about like you wrote:
Collections.sort(Database.arrayList, new CustomComparator());
A slightly shorter way to write all this, if you don't need to reuse your comparator, is to write it as an inline anonymous class:
Collections.sort(Database.arrayList, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
});
Since java-8
You can now write the last example in a shorter form by using a lambda expression for the Comparator
:
Collections.sort(Database.arrayList,
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
And List
has a sort(Comparator)
method, so you can shorten this even further:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
This is such a common idiom that there's a built-in method to generate a Comparator
for a class with a Comparable
key:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
All of these are equivalent forms.
这篇关于按属性排序自定义对象的ArrayList的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!