Comparable、Comparator介面
阿新 • • 發佈:2018-11-27
小記:
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; } });