工作上遇到一个要求两个不同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. CodeForces - 660D:Number of Parallelograms (问N个点多少个平行四边形)

    pro:给定N个点,问多少个点组成了平行四边形.保证没有三点共线. sol:由于没有三点贡献,所以我们枚举对角线,对角线的中点重合的就是平行四边形.如果没说保证三点不共线就不能这么做,因为有可能4个点 ...

  2. Linux搭建bugfree

    1.xampp安装包地址: 链接:https://pan.baidu.com/s/1Th2QvF77jvIGzMROoF2rbg 密码:yoar 2.因为我用的是xshell5连接Linux服务器,直 ...

  3. 洛谷P1019:单词接龙(DFS)

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  4. centos7通过yum安装mysql,并授权远程连接 【转】

    http://blog.csdn.net/u012367513/article/details/40538267 用于备忘

  5. 利用开源项目jadx反编译Android应用

    原文转自:http://bbs.itheima.com/thread-200475-1-1.html 利用开源项目jadx反编译Android应用 利用Github开源项目jadx可以直接对 .dex ...

  6. utf-8mb4和排序规则

    MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode. 最新的 UTF-8 规范只使用一到四个字节,最大能编码21位, ...

  7. Hbase 与mapreduce结合

    Hbase和mapreduce结合 为什么需要用mapreduce去访问hbase的数据? ——加快分析速度和扩展分析能力 Mapreduce访问hbase数据作分析一定是在离线分析的场景下应用 案例 ...

  8. Linux打开文件设置

    在某些情况下会要求增加Linux的文件打开数,以增加服务器到处理效率,在Linux下查看最多能打开的文件数量为: cat /proc/sys/fs/file-max 然后设置ulimit -n 文件数 ...

  9. 理解OpenShift(4):用户及权限管理

    理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...

  10. [UE4]Window Title Bar Area

    一.Window Title Bar Area.windows窗口拖拽控件 二.window Buttons Enabled,在控件的右上角显示:最小化.最大化,关闭按钮; Toggle Fullsc ...