工作上遇到一个要求两个不同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. 常用解压包命令----tar--rar

    systemctl stop firewalld    --关闭 linux服务器防火墙 1.*.tar 用 tar –xvf 解压  2.*.gz 用 gzip -d或者gunzip 解压 3.*. ...

  2. excle中如何将一串数字前后加上单引号

    1.新建excle表 2.构造如下一串字母加数字的字符串: 3.在B1栏中输入="“"&A1&"”",展示效果如下:

  3. 《DSP using MATLAB》Problem 7.12

    阻带衰减50dB,我们选Hamming窗 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  4. Linux LVM使用小记

    对于Linux LVM一直不太理解,直到最近使用了简单功能后才稍微明白点. 对于硬盘空间物理上的使用,我们都是先对硬盘进行分区,然后格式化成文件系统支持的类型,最后给操作系统使用.但是这种使用方式很不 ...

  5. Python开发 基礎知識 (未完代補)

    一.Python基本知識 1.Python屬高階語言,所編築的是字節碼 2.一般狀態statement 終止於換行,如需使用多數行編寫,可在行末加上 \,以表延續 但在 parentheses ( ) ...

  6. gitlab部署步骤+汉化

    系统环境centos7 下载gitlab安装包 https://packages.gitlab.com/gitlab/gitlab-ce 我下载的版本是 gitlab-ce-11.1.4-ce.0.e ...

  7. python3 访问百度返回压缩格式

    import urllib, urllib.request, urllib.parse import random import zlib import re import os, time Save ...

  8. python 前后端分离 简单的数据库返回接口

    1.使用node http-server 起本地服务器  或者打开nginx 直接用nginx的默认页面也可以 (用下面的html文件替换nginx下html文件夹下的index.html) http ...

  9. python import引入不同路径下的模块

    转载 python 包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径. 下面将具体介绍几种常用情况: (1)主程序与模块程序在同一目录下: 如下面程序结构: `- ...

  10. 【idea】之使用SVN一些技巧

    @Copy https://www.cnblogs.com/whc321/p/5669804.html