好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
通过属性来对ArrayList中的自定义对象排序 关闭 返回上一级  

通过属性来对ArrayList中的自定义对象排序
+ 查看更多

发布日期:2018-03-10 13:28
分类:JAVA
浏览次数:115
如下:
我读过关于使用比较器来对ArrayList排序,但所有现有的例子中,人们跟对String排序一样使用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);
    ...
}
回答
因为D@ate@实现了Comparable接口,就像String,它有一个compareTo函数。所以你的自定义比较器可以像这样:
public class CustomComparator implements Comparator {
    @Override
    public int compare(MyObject o1, MyObject o2) {
        return o1.getStartDate().compareTo(o2.getStartDate());
    }
}
compare函数必须返回整型值,不能像你那样返回一个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表达式以更简短的方式实现这个比较器:
Collections.sort(Database.arrayList, 
                        (o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
List有一个sort(Comparator)方法,所有还有更简短的方式
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
这是一个常规,就是用一个内置方法来生成比较器通过一个类的比较关键。
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
上面所有的形式都是等同的。
上一篇在Java中如何将一个数舍入到小数点后n位
java中wait和sleep之间的区别下一篇
下一篇java中wait和sleep之间的区别

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2022  苏州卡达网络科技有限公司 备案号:苏ICP备09008221号