工作上遇到一个要求两个不同list对象合并后并排序
1、问题描述
从数据库中查询两张表的当天数据,并对这两张表的数据,进行合并,然后根据时间排序。
2、思路
从数据库中查询到的数据放到各自list中,先遍历两个list,存到主list中,然后根据各自list的对象属性time属性排序。
3、需要技术
Java API针对集合类型排序提供了两种支持:
Java.util.Collections.sort(java.util.List)
Java.util.Collections.sort(java.util.List, java.util.Comparator)
第一个方法要求所排序的元素类必须实现java.lang.Comparable接口。
第二个方法要求实现一个java.util.Comparator接口。
这两个接口不但可以用于集合元素排序,还可以用于数组排序。如果数组或集合元素是String类型,则可以利用JavaAPIComparator对象String.CASE_INSENSITIVE_ORDER为容器元素排序。
代码演示

public class Bill {
private Integer id ;
private String card ;
private String money ;
private Timestamp conDateTime ;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCard() {
return card;
}
public void setCard(String card) {
this.card = card;
}
public String getMoney() {
return money;
}
public void setMoney(String money) {
this.money = money;
}
public Timestamp getConDateTime() {
return conDateTime;
}
public void setConDateTime(Timestamp conDateTime) {
this.conDateTime = conDateTime;
}
}

编写对象 Bill.java

public class Recharge {
private Integer id ;
private String amount ;
private String money ;
private String conType ;
private Timestamp rechargeTime ;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
public String getMoney() {
return money;
}
public void setMoney(String money) {
this.money = money;
}
public String getConType() {
return conType;
}
public void setConType(String conType) {
this.conType = conType;
}
public Timestamp getRechargeTime() {
return rechargeTime;
}
public void setRechargeTime(Timestamp rechargeTime) {
this.rechargeTime = rechargeTime;
}
}

编写对象 Recharge.java

public class ComparatorTime implements Comparator {
/**
*
* TODO 以对象Time判断两个list对象排序(可选).
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
@Override
public int compare(Object arg0, Object arg1) {
Bill cb ;
Recharge rd ;
Bill cb1 ;
Recharge rd1 ;
if(arg0 instanceof Bill){
cb=(Bill)arg0;
if(arg1 instanceof Recharge){
rd=(Recharge)arg1;
return cb.getConDateTime().compareTo(rd.getRechargeTime());
}else{
cb1=(Bill)arg1;
return cb.getConDateTime().compareTo(cb1.getConDateTime());
}
}else{
rd1=(Recharge)arg0;
if(arg1 instanceof Recharge){
rd=(Recharge)arg1;
return rd1.getRechargeTime().compareTo(rd.getRechargeTime());
}else{
cb=(Bill)arg1;
return rd1.getRechargeTime().compareTo(cb.getConDateTime());
}
}
}
}

通过实现Comparable接口实现个性化排序测试。
升序排列:Collection.sort(list)
降序排列:Collections.sort(list, Collections.reverseOrder());
反转排序:Collections.reverse(list);

public class Test {
public static void main(String[] args) {
Bill cb1 = new Bill() ;
cb1.setId(1);
cb1.setCard("1111");
cb1.setMoney("1111");
cb1.setConDateTime(Timestamp.valueOf("2016-09-28 16:00:00.0"));
Bill cb2 = new Bill() ;
cb2.setId(2);
cb2.setCard("2222");
cb2.setMoney("2222");
cb2.setConDateTime(Timestamp.valueOf("2016-09-28 10:00:00.0"));
Recharge rd1 = new Recharge() ;
rd1.setId(3);
rd1.setAmount("3333");
rd1.setConType("3333");
rd1.setMoney("3333");
rd1.setRechargeTime(Timestamp.valueOf("2016-09-28 8:00:00.0"));
Recharge rd2 = new Recharge() ;
rd2.setId(4);
rd2.setAmount("4444");
rd2.setConType("4444");
rd2.setMoney("4444");
rd2.setRechargeTime(Timestamp.valueOf("2016-09-28 12:00:00.0"));
List<Bill> listBill = new ArrayList<Bill>() ;
listBill.add(cb1) ;
listBill.add(cb2) ;
List<Recharge> listRecharge = new ArrayList<Recharge>() ;
listRecharge.add(rd1) ;
listRecharge.add(rd2) ;
List list = new ArrayList() ;
Iterator it1 = listRecharge.iterator() ;
while(it1.hasNext()) {
list.add(it1.next()) ;
}
Iterator it2 = listBill.iterator() ;
while(it2.hasNext()) {
list.add(it2.next()) ;
}
//排序前
System.out.println("排序前:"+new Gson().toJson(list));
//排序后
ComparatorTime comparator=new ComparatorTime();
Collections.sort(list, comparator);
System.out.println("正序:"+new Gson().toJson(list));
//排序后逆序
Collections.reverse(list);
System.out.println("逆序:"+new Gson().toJson(list));
}
}

测试类Test

效果图

java实现两个不同list对象合并后并排序的更多相关文章

  1. Java学习笔记五 常用API对象一

    常用API:字符串操作:String类,StringBuffer类,StringBulider类 字符串是最重要的数据类型之一,处理字符串也是一种语言的基本工作. 1.String类: public ...

  2. 合并K个排序链表(java实现)

    题目: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: ...

  3. leetcode 23. 合并K个排序链表 JAVA

    题目: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: ...

  4. Java实现 LeetCode 23 合并K个排序链表

    23. 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输 ...

  5. [LeetCode] 23. 合并K个排序链表

    题目链接: https://leetcode-cn.com/problems/merge-k-sorted-lists/ 题目描述: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂 ...

  6. LeetCode 23. 合并K个排序链表(Merge Two Sorted Lists)

    23. 合并K个排序链表 23. Merge k Sorted Lists 题目描述 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. LeetCode23. Merge k S ...

  7. leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1-> ...

  8. 【LeetCode】23.合并K个排序链表

    题目描述 23.合并K个排序链表 合并k个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] ...

  9. 合并K个排序链表

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1-&g ...

随机推荐

  1. 帝国cms自动保存图片

    <?=ECMS_ShowEditorVar("newstext",$ecmsfirstpost==1?"":stripSlashes($r[newstex ...

  2. Oracle使用笔记(二)

    一.表空间 1.创建表空间 create tablespace db_test --表空间名 datafile 'D:\oracle\product\11.2.0\dbhome_1\oradata\o ...

  3. Linux下安装oracle的步骤和一些问题

    今天在Linux64位系统安装oracle数据库,折腾了一天,终于搞定了,现在把安装步骤梳理下,防止以后忘记:    (以下内容来自http://blog.163.com/junwu_lb/blog/ ...

  4. 2018.4.26 lvm

    lvm(Logical Volume Manager)逻辑卷管理,是Linux环境下对磁盘分区进行管理的一种机制. 基本概念: 1. 物理卷-----PV(Physical Volume)物理卷在逻辑 ...

  5. Windows7 密码修改

    一:不用输入原密码的方式修改用户的密码 1 命令行输入命令:mmc  #进入到控制台 2 点击左上角的文件,选择添加/删除管理单元 3 选择本地用户和组管理单元,添加到本地计算机,完成,确定 4 添加 ...

  6. python函数之第一类对象

    目录 python函数之第一类对象 python函数之第一类对象 第一类对象(英语:First-class object)在计算机科学中指可以在执行期创造并作为参数传递给其他函数或存入一个变数的实体. ...

  7. EBS打补丁参考

    EBS Application打补丁参考:http://blog.csdn.net/cunxiyuan108/article/details/6009784 整体步骤: 0. 停止应用(注意确认FND ...

  8. java 从一个工程action 跳转到另外一个工程action

    实现功能:java 从一个工程action 跳转到另外一个工程action 在我们实际编程的过程中,大家一定遇到过这种情况,那就是在一个工程中,需要使用到另外一个工程的实体Bean和方法.那么遇到这种 ...

  9. 解决 windows下安装Anaconda后python pip不可用的情况

    在windows系统下通过安装Anaconda的方式安装的python使用中发现不能再通过pip安装python包.只能通过conda install packname 的方法,导致很多conda不支 ...

  10. 1、Sql-oracle-日期问题

    1.月份差 --MONTHS_BETWEEN(date2,date1) select months_between('19-12月-1999','19-3月-1999') from dual; sel ...