java的list的幾種排序寫法整理(sort的用法)
?版權聲明:本文為博主原創(chuàng)文章想暗,未經(jīng)博主允許不得轉載。https://blog.csdn.net/heliangb46/article/details/77188939
java的實體bean結構
importjava.util.ArrayList;
importjava.util.List;
publicclassHuman{
privateString name;
privateintage;
publicHuman(){
? ? }
publicHuman(String name,intage){
this.name = name;
this.age = age;
? ? }
publicStringgetName(){
returnname;
? ? }
publicvoidsetName(String name){
this.name = name;
? ? }
publicintgetAge(){
returnage;
? ? }
publicvoidsetAge(intage){
this.age = age;
? ? }
@SuppressWarnings("serial")
publicstaticListgetAInitHumanList(){
returnnewArrayList() {
? ? ? ? ? ? {
add(newHuman("guorao",10));
add(newHuman("mako",12));
add(newHuman("hel",30));
add(newHuman("lin",28));
? ? ? ? ? ? }
? ? ? ? };
? ? }
@Override
publicStringtoString(){
returnthis.getName() +":"+this.getAge();
? ? }
}
第一種:實現(xiàn)Comparator接口的類的對象作為sort的入?yún)?/p>
publicclassHumanComparetorimplementsComparator{
@Override
publicintcompare(Human h1, Human h2){
if(h1.getAge() > h2.getAge()) {
return1;
}elseif(h1.getAge() == h2.getAge()) {
return0;
}else{
return-1;
? ? ? ? }
? ? }
}
publicstaticvoidmain(String[] args){
? ? ? ? List<Human> humans = Human.getAInitHumanList();
Collections.sort(humans,newHumanComparetor());
? ? ? ? System.out.println(humans);
? ? }
第二種:在方法的局部使用局部類臭笆,原理和第一種差不多
publicstaticvoidmain(String[] args){
? ? ? ? List<Human> humans = Human.getAInitHumanList();
//方法內(nèi)-局部類
classHumanComparetorimplementsComparator{
@Override
publicintcompare(Human h1, Human h2){
returnh1.getAge() - h2.getAge();
? ? ? ? ? ? }
? ? ? ? }
Collections.sort(humans,newHumanComparetor());
? ? ? ? System.out.println(humans);
? ? }
第三種:基于第二種方法抒巢,局部類改為匿名類
publicstaticvoidmain(String[] args){
? ? ? ? List<Human> humans = Human.getAInitHumanList();
//匿名類
Collections.sort(humans,newComparator() {
@Override
publicintcompare(Human h1, Human h2){
returnh1.getAge() - h2.getAge();
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? System.out.println(humans);
? ? }
第四種:使用lamdba表達式->這種形式
publicstaticvoidmain(String[] args){
? ? ? ? List<Human> humans = Human.getAInitHumanList();
//lamdba 表達式 ->
? ? ? ? Collections.sort(humans, (Human h1, Human h2) -> h1.getAge() - h2.getAge());
? ? ? ? System.out.println(humans);
? ? }
第五種:借助Comparator和lamdba表達式多條件排序
publicstaticvoidmain(String[] args){
? ? ? ? List<Human> humans = Human.getAInitHumanList();
////lamdba 表達式 ::
? ? ? ? Collections.sort(humans, Comparator.comparing(Human::getAge).thenComparing(Human::getName));
? ? ? ? System.out.println(humans);
? ? }
第六種:調(diào)用方式和第五種有區(qū)別架专,原理一樣
publicstaticvoidmain(String[] args){
? ? ? ? List<Human> humans = Human.getAInitHumanList();
//直接用list.sort
? ? ? ? humans.sort(Comparator.comparing(Human::getAge).thenComparing(Human::getName));
? ? ? ? System.out.println(humans);
? ? }