工作上遇到一个要求两个不同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 classBill {privateInteger id ;privateString card ;privateString money ;privateTimestamp conDateTime ;publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getCard() {returncard;

}public voidsetCard(String card) {this.card =card;

}publicString getMoney() {returnmoney;

}public voidsetMoney(String money) {this.money =money;

}publicTimestamp getConDateTime() {returnconDateTime;

}public voidsetConDateTime(Timestamp conDateTime) {this.conDateTime =conDateTime;

}

}

编写对象 Bill.java

public classRecharge {privateInteger id ;privateString amount ;privateString money ;privateString conType ;privateTimestamp rechargeTime ;publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getAmount() {returnamount;

}public voidsetAmount(String amount) {this.amount =amount;

}publicString getMoney() {returnmoney;

}public voidsetMoney(String money) {this.money =money;

}publicString getConType() {returnconType;

}public voidsetConType(String conType) {this.conType =conType;

}publicTimestamp getRechargeTime() {returnrechargeTime;

}public voidsetRechargeTime(Timestamp rechargeTime) {this.rechargeTime =rechargeTime;

}

}

编写对象 Recharge.java

public class ComparatorTime implementsComparator {/***

* TODO 以对象Time判断两个list对象排序(可选).

*@seejava.util.Comparator#compare(java.lang.Object, java.lang.Object)*/@Overridepublic intcompare(Object arg0, Object arg1) {

Bill cb ;

Recharge rd ;

Bill cb1 ;

Recharge rd1 ;if(arg0 instanceofBill){

cb=(Bill)arg0;if(arg1 instanceofRecharge){

rd=(Recharge)arg1;returncb.getConDateTime().compareTo(rd.getRechargeTime());

}else{

cb1=(Bill)arg1;returncb.getConDateTime().compareTo(cb1.getConDateTime());

}

}else{

rd1=(Recharge)arg0;if(arg1 instanceofRecharge){

rd=(Recharge)arg1;returnrd1.getRechargeTime().compareTo(rd.getRechargeTime());

}else{

cb=(Bill)arg1;returnrd1.getRechargeTime().compareTo(cb.getConDateTime());

}

}

}

}

通过实现Comparable接口实现个性化排序测试。

升序排列:Collection.sort(list)

降序排列:Collections.sort(list, Collections.reverseOrder());

反转排序:Collections.reverse(list);

public classTest {public static voidmain(String[] args) {

Bill cb1= newBill() ;

cb1.setId(1);

cb1.setCard("1111");

cb1.setMoney("1111");

cb1.setConDateTime(Timestamp.valueOf("2016-09-28 16:00:00.0"));

Bill cb2= newBill() ;

cb2.setId(2);

cb2.setCard("2222");

cb2.setMoney("2222");

cb2.setConDateTime(Timestamp.valueOf("2016-09-28 10:00:00.0"));

Recharge rd1= newRecharge() ;

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= newRecharge() ;

rd2.setId(4);

rd2.setAmount("4444");

rd2.setConType("4444");

rd2.setMoney("4444");

rd2.setRechargeTime(Timestamp.valueOf("2016-09-28 12:00:00.0"));

List listBill = new ArrayList() ;

listBill.add(cb1) ;

listBill.add(cb2) ;

List listRecharge = new ArrayList() ;

listRecharge.add(rd1) ;

listRecharge.add(rd2) ;

List list= newArrayList() ;

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("排序前:"+newGson().toJson(list));//排序后

ComparatorTime comparator=newComparatorTime();

Collections.sort(list, comparator);

System.out.println("正序:"+newGson().toJson(list));//排序后逆序

Collections.reverse(list);

System.out.println("逆序:"+newGson().toJson(list));

}

}

测试类Test

效果图

java 两个list排序_java实现两个不同list对象合并后并排序相关推荐

  1. java数组合并排序_Java将两排序数组合并

    早些天给深圳芒果网投了一份简历,接到了面试电话,经过三轮面试,最后也拿到了offer.前两轮面试还好,问的问题都还答的出,到第三轮的时候,出了一道算法题,可能太紧张,思考许久也只给出了解题思路,没有将 ...

  2. 《Python Cookbook 3rd》笔记(4.15):顺序迭代合并后的排序迭代对象

    顺序迭代合并后的排序迭代对象 问题 你有一系列排序序列,想将它们合并后得到一个排序序列并在上面迭代遍历. 解法 heapq.merge() 函数可以帮你解决这个问题.比如: >>> ...

  3. java集合对象排序_java ArrayList集合中的某个对象属性进行排序的实现代码

    开发中有时候需要自己封装分页排序时,List如何对某一属性排序呢,分享一个小实例,大家共勉,希望能对大家有用,请多多指教. 1.Student的Bean如下: public class Student ...

  4. java sql 排序_JAVA像SQL一样对List对象集合进行排序

    在开始之前,我先卖个关子提一个问题:假设我们有一个Movie类,这个类有三个成员变量分别是starred(是否收藏), title(电影名称), rating(评分).你知道怎么对一个Movie对象组 ...

  5. java treemap value排序_Java TreeMap升序|降序排列和按照value进行排序的案例

    TreeMap 升序|降序排列 import java.util.Comparator; import java.util.TreeMap; public class Main { public st ...

  6. java判断两个int相等_Java 判断两个变量是否相等

    判断两个变量是否相等的方式有两种:利用运算符 == 利用equals方法 (1)比较基本Java基本数据类型 比较基本数据类型,只能用"==",不能用equals,这里比较的是两个 ...

  7. java两个字符串前缀_java – 找到两个字符串的最长公共前缀

    我想找到两个字符串的最长公共前缀. 有没有办法循环我的最后几个if语句,以便我可以结束彼此不匹配的最后几个字符? System.out.println("Enter the first st ...

  8. java 日期 相差的天数_JAVA计算两个日期之间相差的天数

    在Java开发物流或是其他功能的时候会用到两个日期相差多天的数据,所以整理了一下备用. 调用方式: long date1 = getDateTime("20121201");//可 ...

  9. java保留两位小数怎么_java保留两位小数4种方法

    java保留两位小数4种方法 Java中保留小数有四种方法,如下: public class Format { double f = 23065.57845; public void m1() { B ...

最新文章

  1. 1035等差数列末项计算
  2. ajax post请求,后台servlet来接收
  3. java并发编程与线程安全
  4. Xquery 被设计用来查询 XML 数据
  5. 微信小程序开发系列七:微信小程序的页面跳转
  6. Linux安装CUDA的正确姿势
  7. 2020顶会指南:征稿截止时间、举办地、举办时间一览
  8. 小米MIX 4概念渲染图曝光:无孔屏下摄像头果真科幻
  9. 【报告分享】中国人工智能产业发展指数.pdf
  10. golang利用反射写入excel的简单工具类
  11. 使用CompletionService结合ExecutorService批处理任务
  12. AX 2012 键盘快捷键
  13. 汽车故障诊断技术【1】
  14. 批量将多个 PDF 文件合并成一个独立的 PDF 文件
  15. 51单片机:独立按键
  16. weex_iOS集成
  17. jdk8 list Stream groupingBy 分组之后 利用 reducing 求和 BigDecimal
  18. 史玉柱退休继续“烧脑”手游成新宠
  19. 2-10 CAD基础 偏移(offset)
  20. luoguP3600 随机数生成器概率与期望Dp

热门文章

  1. 渗透测试信息收集之域名信息、子域名信息、IP信息、端口信息
  2. Android优秀软件推荐
  3. 喜欢动漫的小伙伴看过来
  4. 分类算法之K近邻和朴素贝叶斯
  5. 程序猿段子_10个关于程序员的段子,看了你没感觉,你就是假的程序员!
  6. 附加3 Merging Linked Lists (25 分)
  7. IOS开发之——AFN-文件上传(02)
  8. 关于云计算中可信计算的说明
  9. html页面禁止右键、禁止复制、禁止图片拖动、禁止复制和剪切禁止IOS长按复制粘贴实现
  10. 数据库系统概论练习题