Comparable、Comparator

小记:

    Comparable接口:只有一个compareTo(T o)方法;一般由类实现该接口

    Comparator接口:方法很多但只需要重写compare(T o1, T o2)方法,其他方法不用实现,因为jdk8以后,接口中用default修饰的方法可以有方法体,类似抽象类。一般用于匿名内部类

 

简单实例:

       BigDecimal实现了Comparable接口,所以内部可以直接调用o1.compareTo(o2);Character是字符操作类,Character.isDigit(char c)判断是不是数字。 

List<Vouchers> vouchers_Acc = new ArrayList<Vouchers>();
Collections.sort(vouchers_Acc, new Comparator<Voucher>(){	// 根据account_no排序
    @Override
	public int compare(Voucher o1, Voucher o2) {
	    if (o1 instanceof Voucher && o2 instanceof Voucher) {
	        Voucher v1 = (Voucher)o1;
		    Voucher v2 = (Voucher)o2;
		    BigDecimal acc_no1 =  new BigDecimal((ValidTools.isMath(v1.getAccount_no()) ? v1.getAccount_no() : "0"));
		    BigDecimal acc_no2 =  new BigDecimal((ValidTools.isMath(v2.getAccount_no()) ? v2.getAccount_no() : "0"));
		    return acc_no1.compareTo(acc_no2);
	    }
	return 0;
	}
});

 

       TreeSet存储自定义类型要实现Comparator接口。

vouchers_Prj = new TreeSet<Voucher>(new Comparator<Voucher>() {
    @Override
	public int compare(Voucher o1, Voucher o2) {
		if (o1 instanceof Voucher && o2 instanceof Voucher) {
			Voucher v1 = (Voucher)o1;
			Voucher v2 = (Voucher)o2;
			BigDecimal prj_code1 =  new BigDecimal((ValidTools.isMath(v1.getPrj_code()) ? v1.getPrj_code() : "0"));
			BigDecimal prj_code2 =  new BigDecimal((ValidTools.isMath(v2.getPrj_code()) ? v2.getPrj_code() : "0"));
			return prj_code1.compareTo(prj_code2);
		}
	    return 0;
	}
});

3、也可以在实体类中实现Comparator接口

那么在调用Collections.sort的时候可以直接这样调用:

Collections.sort(entry.getValue(), new AggInvAna());

public class AggInvAna implements Comparator<AggInvAna> {

    private String dDate;
    
    public String getdDate() {
        return dDate;
    }

    public void setdDate(String dDate) {
        this.dDate = dDate;
    }

    @Override
    public int compare(AggInvAna o1, AggInvAna o2) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            return format.parse(o1.getdDate()).compareTo(format.parse(o2.getdDate()));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }
}
Collections.sort(entry.getValue(), new AggInvAna());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值