我读过关于使用比较器对数组列表进行排序的文章,但在所有的例子中,人们都使用了compareTo,根据一些研究,这是一种字符串排序的方法.

我想按自定义对象的属性之一对其数组列表进行排序:日期对象

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());
    }
});

Since

现在,您可以用lambda expression表示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()));

这是一个常见的习惯用法,对于一个Comparable键的类,要生成Comparator,需要a built-in method个:

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

所有这些都是等价的形式.

Java相关问答推荐

在applitcation.properties中找到的字符串中输入变量

OpenJDK、4K显示和文本质量

使用java访问具体子类特定方法的最佳方法是什么?

将数组整体转换为链接表

R.id.main给我一个红色错误,无法解析MainActivity.java中的符号main

获取字符串中带空格的数字和Java中的字符

为什么在maven中,getLast方法不适用于List?

按属性值从流中筛选出重复项

如何对多个字段进行分组和排序?

每次FXMLLoader调用ApplationConext.getBean(类)时创建@Component的新实例

带有Health Check的Spring Boot BuildPack打破了本机映像构建过程

内存和硬盘中的Zip不同,这会导致下载后的Zip损坏

嘲笑黄瓜中的对象

如何在右击时 Select 新行?

如何在Struts2中使用操作类中的结果注释重定向到不同的命名空间

如何在Spring Security中设置一个任何人都可以打开的主页?

如何使用jOOQ在PostgreSQL中从枚举类型生成Java枚举

当我将JTextField的getText函数与相等的String进行比较时;t返回true

原始和参数化之间的差异调用orElseGet时可选(供应商)

Java中计算大n和k值模10^9+7的二项式系数的乘法公式输出错误值