按属性排序自定义对象的ArrayList

问题:

我阅读关于使用比较器排序ArrayList,但在所有使用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);
    ...
}

回答:

由于Date实现Comparable,因此String具有compareTo方法。
所以您的自定义Comparator可能如下所示:

public class CustomComparator implements Comparator<MyObject> {
    @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<MyObject>() {
    @Override
    public int compare(MyObject o1, MyObject o2) {
        return o1.getStartDate().compareTo(o2.getStartDate());
    }
});

以来

现在可以使用lambda expressionComparator编写较短的最后一个示例

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

List有一种sort(Comparator)方法,所以您可以进一步缩短这一点:

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

这是一个常见的习语,a built-in methodComparable键的课程生成Comparator

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

所有这些都是等效的形式。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Sort ArrayList of custom Objects by property

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 2 = 1