java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法
原文地址https://segmentfault.com/a/1190000005738975
?
實體類:java.lang.Comparable(接口) + comareTo(重寫方法),業務排序類 java.util.Comparator(接口) + compare(重寫方法).
這兩個接口我們非常的熟悉,但是 在用的時候會有一些不知道怎么下手的感覺,現在用案例進行總結,消除對這個知識點的理解盲區(個人的理解,如果有錯誤 請多多指教)。
一,在實際的需求中,我們需要根據對象的各種屬性(標題,時間,點擊率,銷售額...)進行排序(升序,降序),可以在數據庫的sql上進行處理,但是 不是每一個場景 都適合在sql上進行處理,我們有時候需要在程序根據不同的屬性,對一個對象進行各種排序 通過頁面呈現給用戶。
下面有這樣的一個需求,一種商品(商品名,銷售量,生產日期),根據生產日期降序 銷售量升序 商品名稱降序
思路:首先按照日期降序,如果日期相同 按照銷售量升序,如果銷售量相同,按周商品的名稱降序
1,創建需要比較的對象的java bean
創建 Bean的快捷鍵:
1),帶參數的構造器:// Shift + Alt + S -->O
2),不帶參數的構造器: //Alt + / 生成空的構造方法
3),生成 get set方法:// Shift + Alt + S --> R + Table + Enter + Shift +Table -->Enter
?
2,造數據,比較
//時間降序, 銷售量升序, 標題降序 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的應用場景
一般比較字符串是按照unicode的大小進行排序的,但是我需要按照字符串的長度進行排序,下面是實現的案例:
首先,定義比較的業務規則
?
比較 字符串的長度,按照 降序排列
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]}?
比如 商品,我需要按照價格的降序排列,代碼如下:
商品 po類
?
定義比較規則:
/*** 按照價格的降序排列*/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));}}?
數據比較:
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);結果:[title=b,price=143432title=d,price=11092title=c,price=1892title=a,price=120]}?
轉載于:https://www.cnblogs.com/111testing/p/9158140.html
總結
以上是生活随笔為你收集整理的java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS中NSString转换成HEX(十
- 下一篇: 【Ruby】Ruby 类案例