Java中Comparator與Comparable排序的區(qū)別詳解
場景
java中進行排序比較時Comparator與Comparable區(qū)別:
如果你有一個類,希望支持同類型的自定義比較策略,可以實現(xiàn)接口Comparable
如果某個類,沒有實現(xiàn)Comparable,但是又希望對它進行比較,則可以自定義一個Comparator,來定義這個類的比較規(guī)則
使用Comparable進行排序比較
新建類CompareDemo,并添加code和age屬性,該類實現(xiàn)Comparable接口
并重新compareTo方法
public class CompareDemo implements Comparable<CompareDemo>{
int code;
int age;
public CompareDemo(int code, int age) {
this.code = code;
this.age = age;
}
@Override
public int compareTo(CompareDemo o) {
if(code == o.code){
return 0;
}else if(code<o.code){
return -1;
}else{
return 0;
}
}
}進行排序比較,默認根據(jù)code進行升序比較
List<CompareDemo> list = new ArrayList<CompareDemo>(){{
add(new CompareDemo(10,20));
add(new CompareDemo(12,30));
add(new CompareDemo(11,10));
}};
list.forEach(compareDemo -> System.out.println(compareDemo.code));
//默認根據(jù)code進行升序比較
list.sort(null);
list.forEach(compareDemo -> System.out.println(compareDemo.code));如果現(xiàn)在需求變了,希望針對age字段,進行升序排序,那么就可以利用Comparator實現(xiàn)。
使用Comparator進行排序
list.sort(new Comparator<CompareDemo>() {
@Override
public int compare(CompareDemo o1, CompareDemo o2) {
if (o1.age == o2.age) {
return 0;
} else if (o1.age < o2.age) {
return -1;
} else {
return 1;
}
}
});
list.forEach(compareDemo -> System.out.println(compareDemo.age));上面的排序可以簡化為
list.sort(new Comparator<CompareDemo>() {
@Override
public int compare(CompareDemo o1, CompareDemo o2) {
return Integer.compare(o1.age,o2.age);
}
});在JDK1.8中還可以更簡化
list.sort(Comparator.comparingInt(o -> o.age));
如果希望倒序
list.sort(new Comparator<CompareDemo>() {
@Override
public int compare(CompareDemo o1, CompareDemo o2) {
return Integer.compare(o2.age,o1.age);
}
});在jdk1.8中,使用負數(shù)
list.sort(Comparator.comparingInt(o->-o.age)); list.forEach(compareDemo -> System.out.println(compareDemo.age));
到此這篇關(guān)于Java中Comparator與Comparable排序的區(qū)別詳解的文章就介紹到這了,更多相關(guān)Comparator與Comparable區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java字符轉(zhuǎn)碼的三種方法總結(jié)及實例
這篇文章主要介紹了 java字符轉(zhuǎn)碼的三種方法總結(jié)及實例的相關(guān)資料,需要的朋友可以參考下2017-03-03
JAVA實現(xiàn)漢字轉(zhuǎn)拼音功能代碼實例
這篇文章主要介紹了JAVA實現(xiàn)漢字轉(zhuǎn)拼音功能代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05
spring @Scheduled注解的使用誤區(qū)及解決
這篇文章主要介紹了spring @Scheduled注解的使用誤區(qū)及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
利用ScriptEngineManager實現(xiàn)字符串公式靈活計算的方法
今天小編就為大家分享一篇利用ScriptEngineManager實現(xiàn)字符串公式靈活計算的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
詳解springmvc控制登錄用戶session失效后跳轉(zhuǎn)登錄頁面
本篇文章主要介紹了springmvc控制登錄用戶session失效后跳轉(zhuǎn)登錄頁面,session一旦失效就需要重新登陸,有興趣的同學(xué)可以了解一下。2017-01-01

