java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法
原文地址https://segmentfault.com/a/1190000005738975
?
實(shí)體類(lèi):java.lang.Comparable(接口) + comareTo(重寫(xiě)方法),業(yè)務(wù)排序類(lèi) java.util.Comparator(接口) + compare(重寫(xiě)方法).
這兩個(gè)接口我們非常的熟悉,但是 在用的時(shí)候會(huì)有一些不知道怎么下手的感覺(jué),現(xiàn)在用案例進(jìn)行總結(jié),消除對(duì)這個(gè)知識(shí)點(diǎn)的理解盲區(qū)(個(gè)人的理解,如果有錯(cuò)誤 請(qǐng)多多指教)。
一,在實(shí)際的需求中,我們需要根據(jù)對(duì)象的各種屬性(標(biāo)題,時(shí)間,點(diǎn)擊率,銷(xiāo)售額...)進(jìn)行排序(升序,降序),可以在數(shù)據(jù)庫(kù)的sql上進(jìn)行處理,但是 不是每一個(gè)場(chǎng)景 都適合在sql上進(jìn)行處理,我們有時(shí)候需要在程序根據(jù)不同的屬性,對(duì)一個(gè)對(duì)象進(jìn)行各種排序 通過(guò)頁(yè)面呈現(xiàn)給用戶(hù)。
下面有這樣的一個(gè)需求,一種商品(商品名,銷(xiāo)售量,生產(chǎn)日期),根據(jù)生產(chǎn)日期降序 銷(xiāo)售量升序 商品名稱(chēng)降序
思路:首先按照日期降序,如果日期相同 按照銷(xiāo)售量升序,如果銷(xiāo)售量相同,按周商品的名稱(chēng)降序
1,創(chuàng)建需要比較的對(duì)象的java bean
創(chuàng)建 Bean的快捷鍵:
1),帶參數(shù)的構(gòu)造器:// Shift + Alt + S -->O
2),不帶參數(shù)的構(gòu)造器: //Alt + / 生成空的構(gòu)造方法
3),生成 get set方法:// Shift + Alt + S --> R + Table + Enter + Shift +Table -->Enter
?
2,造數(shù)據(jù),比較
//時(shí)間降序, 銷(xiāo)售量升序, 標(biāo)題降序 public static void main(String[] args) {List<Items> item = new ArrayList<Items>();item.add(new Items("abcitems",30,new Date(System.currentTimeMillis()-1000*60*60)));item.add(new Items("abcfgitems",30,new Date(System.currentTimeMillis()-1000*60*50)));item.add(new Items("abcditems",100,new Date()));item.add(new Items("abefNews",50,new Date(System.currentTimeMillis()-1000*60*60)));System.out.println("----------排序前----------");System.out.println(item);System.out.println("----------排序后----------");Collections.sort(item);System.out.println(item); }?
二,Comparator的應(yīng)用場(chǎng)景
一般比較字符串是按照unicode的大小進(jìn)行排序的,但是我需要按照字符串的長(zhǎng)度進(jìn)行排序,下面是實(shí)現(xiàn)的案例:
首先,定義比較的業(yè)務(wù)規(guī)則
?
比較 字符串的長(zhǎng)度,按照 降序排列
public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("abc");list.add("abcd");list.add("ab");list.add("abd");Collections.sort(list,new CompareString());System.out.println(list);//[abcd, abc, abd, ab]}?
比如 商品,我需要按照價(jià)格的降序排列,代碼如下:
商品 po類(lèi)
?
定義比較規(guī)則:
/*** 按照價(jià)格的降序排列*/public class ProductCompare implements java.util.Comparator<Products> {@Overridepublic int compare(Products o1, Products o2) {return -( o1.getPrice()-o2.getPrice()>0?1: (o1.getPrice()==o2.getPrice()?0:-1));}}?
數(shù)據(jù)比較:
public static void main(String[] args) {List<Products> product = new ArrayList<Products>();product.add(new Products("a",120));product.add(new Products("b",143432));product.add(new Products("c",1892));product.add(new Products("d",11092));Collections.sort(product,new ProductCompare());System.out.println(product);結(jié)果:[title=b,price=143432title=d,price=11092title=c,price=1892title=a,price=120]}?
轉(zhuǎn)載于:https://www.cnblogs.com/111testing/p/9158140.html
總結(jié)
以上是生活随笔為你收集整理的java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: iOS中NSString转换成HEX(十
- 下一篇: 微信亲属卡需要密码吗?微信亲属卡没钱能用