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

工作上遇到一个要求两个不同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为容器元素排序。

代码演示

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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);

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

效果图

fee09d962d41bad41aae7e5afb1673a0.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值