java自定义ArrayList排序, 大神略过

一个list里面有两种对象,现在有个需求必须对不同的对象的日期来排序,以下是代码

/**

*@author 肖华 [email protected]

*/

List<Message> messages=messageSrv.getList(u.getUserId());

List<Object> messageList=new ArrayList<Object>();

for(Object o:messages){

messageList.add(o);

}

for(Object o:checks){

messageList.add(o);

}

Collections.sort(messageList,  new Comparator(){

public int compare(Object o1, Object o2) {

if(o1 instanceof Message && o2 instanceof Message){

Message m=(Message) o1;

Message m2=(Message) o2;

if(m.getMessageDate().after(m2.getMessageDate()))

return 1;

if(m.getMessageDate().equals(m2.getMessageDate()))

return 0;

if(m.getMessageDate().before(m2.getMessageDate()))

return -1;

}else if(o1 instanceof CheckRecord && o2 instanceof Message){

CheckRecord m=(CheckRecord) o1;

Message m2=(Message) o2;

if(m.getCdate().after(m2.getMessageDate()))

return 1;

if(m.getCdate().equals(m2.getMessageDate()))

return 0;

if(m.getCdate().before(m2.getMessageDate()))

return -1;

}else if(o1 instanceof CheckRecord && o2 instanceof CheckRecord){

CheckRecord m=(CheckRecord) o1;

CheckRecord m2=(CheckRecord) o2;

if(m.getCdate().after(m2.getCdate()))

return 1;

if(m.getCdate().equals(m2.getCdate()))

return 0;

if(m.getCdate().before(m2.getCdate()))

return -1;

}else if(o1 instanceof Message && o2 instanceof CheckRecord){

Message m=(Message) o1;

CheckRecord m2=(CheckRecord) o2;

if(m.getMessageDate().after(m2.getCdate()))

return 1;

if(m.getMessageDate().equals(m2.getCdate()))

return 0;

if(m.getMessageDate().before(m2.getCdate()))

return -1;

}

return 0;

}

写个日志不容易,转载请注明出处:http://blog.csdn.net/xh199110  谢谢

时间: 2025-01-21 20:55:01

java自定义ArrayList排序, 大神略过的相关文章

java自定义容器排序的两种方法

首先说一下排序的返回值的含义.对于参与比较的两个Object,o1和o2,如果函数的返回值为正值,把o1排在o2后面:返回值为负值,把o1排在o2前面.如果返回值是0,按照容器之前的顺序排列.在compareTo中,this相当于o1,传入的Object相当于o2 第一种方法:对于要排序的类实现Comparable接口 package sort; import java.util.ArrayList; import java.util.Collections; import java.util.

新手入门,学习java从小白到大神应该从何做起?

编程入门先学什么?关于编程,关于编程的基础语言,想要学习的朋友,一定会多多少少了解一些.像 C.C++.Python和Java四种都是通用的编程语言,而JavaScript和PHP算是Web环境的专用编程语言.但其实,编程的语言有很多种,想要入门编程,要学习的编程语言也很多.在这里我就简单总结下编程入门的一系列学习方法. 上面我们提到,学习编程的语言有很多种,像C.C++.Python和Java四种都是通用的编程语言,但是编程的思想和学习方法都是一样的,不应该去死记硬背,而应该去灵活和变通地去学

java中格式化输出大神Formatter简历

一.干嘛的?(作用) 在java中,所有新的格式化功能都有formatter类处理.可以将formatter看作一个翻译器,它将你的格式化字符串与数据翻译成需要的结果.比如很多地方格式输出都有用到,像我们在超市购物付款时候打印的购物小票啊,所以还是很实用的. 二.籍贯(所在库) java中的Formatter类位于java.util.Formatter中,所以需要用到的时候只要import进来就可以用了.注意,请选择1.5及以上版本的编译器,否则会出现"The method format(Str

算法大神之路----排序(冒泡排序法)

冒泡排序法 冒泡排序法又称为交换排序法,是由观察水中冒泡变化构思而成,气泡随着水深压力而改变.气泡在水底时,水压最大,气泡最小,而气泡慢慢浮上水面时,气泡所受压力最小,体积慢慢变大. 冒泡排序比较方式是从第一个元素开始,比较相邻的元素大小,如果大小顺序有误,则对调后进行下一个元素比较.直到所有元素满足关系为止. 冒泡排序法分析 冒泡排序法平均情况下,需要比较(n-1)/2次,时间复杂度为O(n2),最好的情况只需要扫描一次,不用操作,即作n-1次比较,时间复杂度为O(n). 由于冒泡排序为相邻两

算法大神之路----排序(选择排序法)

选择排序法,顾名思义,就是把特定的数据选择出来进行排序. 选择排序法有两种方式 在所有的数据中,当由大到小排序,那么就将最大值放到第一个位置 如果由小到大排序,那么就将最小值放到第一个位置 以由小到大排序举例,当排序时候,扫描整个数据,拿第一个依次与其他做比较,如果其他数据比第一个大,或者相等,那么就不交换,如果其他数据比第一个数小,那么就交换二者的位置,扫描结束后,则从第二个数开始,依次扫描. 方法分析 无论是最坏还是最好情况,甚至是平均情况下,都需要对全部数据进行扫描,找到最大或最小值,因此

算法大神之路----排序(插入排序法)

插入排序法 所谓插入排序法乃是将一个数目插入该占据的位置. 输入一个元素,检查数组列表中的每个元素,将其插入到一个已经排好序的数列中的适当位置,使数列依然有序,当最后一个元素放入合适位置时,该数组排序完毕. 代码示例: import java.util.Random; /** * 算法大神之路----排序(插入排序法) */ public class Study03 { public static void main(String[] args) { //新建一个数组 int[] arr = n

【推荐】Java工程师如何从普通成为大神值得一读

本文源自 http://www.hollischuang.com/archives/489 一点感悟 java作为一门编程语言,在各类编程语言中作为弄潮儿始终排在前三的位置,这充分肯定了java语言的魅力,在实际项目应用中,我们已经无法脱离javaa(Ps当然你可以选择不使用),但它的高性能,稳定性,扩展性已经深入到每一个java编程工程师的骨髓里,随着时间的推移,我相信更多的项目会加入到java这个大家庭. 然而要想成为一名合格的java工程师并不容易,难于上青天,此话怎讲呢?作为计算机专业的

Java ArrayList排序方法详解

由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在添加和移除元素的时候进行动态的扩展和缩减.你可能已经使用过 ArrayList,因此我将略过基础部分.如果你对 ArrayList 还不熟悉,你可以参考它的 API 文档,可以很容易理解在 ArrayList 上执行基本的操作.In this post, I will discuss one of

汪大神Java多线程编程实战

课程目录:├─1│  ├─Java并发编程.png│  ├─源码+ppt.rar│  ├─高并发编程第一阶段01讲.课程大纲及主要内容介绍.wmv│  ├─高并发编程第一阶段02讲.简单介绍什么是线程.wmv│  ├─高并发编程第一阶段03讲.创建并启动线程.mp4│  ├─高并发编程第一阶段04讲.线程生命周期以及start方法源码剖析.mp4│  ├─高并发编程第一阶段05讲.采用多线程方式模拟银行排队叫号.mp4│  ├─高并发编程第一阶段06讲.用Runnable接口将线程的逻辑执行单元