java积累(一)------后端---Comparator比较器的用法
生活随笔
收集整理的這篇文章主要介紹了
java积累(一)------后端---Comparator比较器的用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對數組或者List列表,或者Map(非hash)等排序是我們經常使用的一種處理數據的手段。Comparator接口是java中很方便的一個接口。
我們只需要重寫compare方法即可實現排序。
int compare(Object o1, Object o2) 返回一個基本類型的整型
如果要按照升序排序,
則o1 小于o2,返回-1(負數),相等返回0,01大于02返回1(正數)
如果要按照降序排序
則o1 小于o2,返回1(正數),相等返回0,01大于02返回-1(負數)
使用步驟
新建比較器并重寫compare方法
Comparator<User> comp=new Comparator<User>(){//升序public int compare(User o1,User o2){if(o1.getAge()>o2.getAge()){return 1;}else if(o1.getAge()==o2.getAge()){return 0;}else{return -1;} } };也可以新建內部類或者外部類如下:
public class UserAgeComparator implements Comparator<User> { //升序public int compare(User o1,User o2){if(o1.getAge()>o2.getAge()){return 1;}else if(o1.getAge()==o2.getAge()){return 0;}else{return -1;} }}使用比較器
Collections.sort(users,comp); Collections.reverse(users);//反轉排序 如果是類的的話需要先實例化再使用
UserAgeCompartor mc = new UserAgeCompartor ();Collections.sort(list, mc);
自定義比較器----文本比較
上述的使用方法已經能夠滿足大部分的使用場景。只需要我們處理compare函數中的比較邏輯即可。(包括數組,字符串長度,時間等的比較都能滿足)。
但是如果要比較文本內容的話,還是自定義比較器規則會方便一些。使用步驟也是一樣的,只是在compare方法中我們需要定義一個規則器。
package com.test; ?import java.text.ParseException; ? import java.text.RuleBasedCollator; ? import java.util.Comparator; ? import com.test.domain.User; ?public class UserNameComparator implements Comparator<User> { ?@Override ?public int compare(User o1, User o2) { ?String myrule = "<王<趙<李<張"; ??RuleBasedCollator myrulecollato = null; ?try { ?myrulecollato = new RuleBasedCollator(myrule); ?} catch (ParseException e) { ?e.printStackTrace(); ?} ?return myrulecollato.compare(o1.getUsername(), o2.getUsername()); ?} ? } ?
這里 "王<趙<李<張" 就是我們規定的文本內容排序規則,這樣的話 有王字的就會排在前面了。如果出現文本模糊匹配不準確的出來的排序不準確的話,只需要把全名寫上就能準確排序了,比如"王五<趙六<李四<張三" ?
如果需要了解原理的話 建議查看這兩篇。
List的sort中的Comparator的使用和原理
JDK 源代碼閱讀之 TimSort
總結
以上是生活随笔為你收集整理的java积累(一)------后端---Comparator比较器的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python抓取视频真实地址_快手批量获
- 下一篇: cpptraj对于轨迹的浓缩