1. 程式人生 > >如何根據物件的屬性,對集合(list / set)中的物件進行排序

如何根據物件的屬性,對集合(list / set)中的物件進行排序

 

 

一:針對list

     通過java.util.Collections的sort方法,有2個引數,第一個引數是list物件,第二個引數是new Comparator<物件類>(){}方法,這個方法實現了compare()方法,具體程式碼如下所示:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 package  test2; import  java.util.ArrayList; import  java.util.Collections; import  java.util.Comparator;
import  java.util.List;   public  class  ListSort {        
public  static  void  main(String[] args) {          List<Person> personList =  new  ArrayList<Person>();          personList.add( new  Person( "王五" , 32 )) ;          personList.add( new  Person( "張三" , 30 )) ;          personList.add( new  Person( "趙六" , 33 )) ;          personList.add( new  Person( "李四" , 31 )) ;          personList.add( new  Person( "孫七" , 33 )) ;                     Collections.sort(personList,  new  Comparator<Person>() {              @Override              public  int  compare(Person p1, Person p2) {                  if (p1.age>p2.age){                      return  1 ;                  }                  else  if (p1.age<p2.age){                      return  0 ;                  }                  else {                      return  p1.name.compareTo(p2.name) ;  // 呼叫String中的compareTo()方法                  }              }          });          System.out.println(personList);      }    }   class  Person {      public  String name ;      public  int  age ;            public  Person(String name, int  age){          this .name = name ;          this .age = age ;      }      public  String toString(){          return  "姓名:"  this .name +  ";年齡:"  this .age ;      } }

程式碼執行的結果為:

  [姓名:張三;年齡:30, 姓名:李四;年齡:31, 姓名:王五;年齡:32, 姓名:孫七;年齡:33, 姓名:趙六;年齡:33]

 

二:針對set

     要排序的物件所屬的類implements  Comparable介面,重寫了compareTo()方法,具體程式碼如下所示:

複製程式碼
package test1;
import java.util.Set ;
import java.util.TreeSet ;

public class TreeSetDemo4{
    public static void main(String args[]){
        Set<Person> allSet = new TreeSet<Person>() ;
        allSet.add(new Person("趙六",33)) ;
        allSet.add(new Person("張三",30)) ;
        allSet.add(new Person("王五",32)) ;
        allSet.add(new Person("李四",31)) ;
        allSet.add(new Person("孫七",33)) ;
        System.out.println(allSet) ;
    }
}

class Person implements Comparable<Person>{
    private String name ;
    private int age ;
    
    public Person(String name,int age){
        this.name = name ;
        this.age = age ;
    }
    public String toString(){
        return "姓名:" + this.name + ";年齡:" + this.age ;
    }
    public int compareTo(Person per){
        if(this.age>per.age){
            return 1 ;
        }else if(this.age<per.age){
            return -1 ;
        }else{
            return this.name.compareTo(per.name) ; // 呼叫String中的compareTo()方法
        }
    }
}
複製程式碼

程式碼執行的結果為:

  [姓名:張三;年齡:30, 姓名:李四;年齡:31, 姓名:王五;年齡:32, 姓名:孫七;年齡:33, 姓名:趙六;年齡:33]

一:針對list

     通過java.util.Collections的sort方法,有2個引數,第一個引數是list物件,第二個引數是new Comparator<物件類>(){}方法,這個方法實現了compare()方法,具體程式碼如下所示:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 package  test2; import  java.util.ArrayList; import  java.util.Collections; import  java.util.Comparator; import  java.util.List;   public  class  ListSort {         public  static  void  main(String[] args) {          List<Person> personList =  new  ArrayList<Person>();          personList.add( new  Person( "王五" , 32 )) ;          personList.add( new  Person( "張三" , 30 )) ;          personList.add( new  Person( "趙六" , 33 )) ;          personList.add( new  Person( "李四" , 31 )) ;          personList.add( new  Person( "孫七" , 33 )) ;                     Collections.sort(personList,  new  Comparator<Person>() {              @Override              public  int  compare(Person p1, Person p2) {                  if (p1.age>p2.age){                      return  1 ;                  }                  else  if (p1.age<p2.age){                      return  0 ;                  }                  else {                      return  p1.name.compareTo(p2.name) ;  // 呼叫String中的compareTo()方法                  }              }          });          System.out.println(personList);      }    }   class  Person {      public  String name ;      public  int  age ;            public  Person(String name, int  age){          this .name = name ;          this .age = age ;      }      public  String toString(){          return  "姓名:"  this .name +  ";年齡:"  this .age ;      } }

程式碼執行的結果為:

  [姓名:張三;年齡:30, 姓名:李四;年齡:31, 姓名:王五;年齡:32, 姓名:孫七;年齡:33, 姓名:趙六;年齡:33]

 

二:針對set

     要排序的物件所屬的類implements  Comparable介面,重寫了compareTo()方法,具體程式碼如下所示:

複製程式碼
package test1;
import java.util.Set ;
import java.util.TreeSet ;

public class TreeSetDemo4{
    public static void main(String args[]){
        Set<Person> allSet = new TreeSet<Person>() ;
        allSet.add(new Person("趙六",33)) ;
        allSet.add(new Person("張三",30)) ;
        allSet.add(new Person("王五",32)) ;
        allSet.add(new Person("李四",31)) ;
        allSet.add(new Person("孫七",33)) ;
        System.out.println(allSet) ;
    }
}

class Person implements Comparable<Person>{
    private String name ;
    private int age ;
    
    public Person(String name,int age){
        this.name = name ;
        this.age = age ;
    }
    public String toString(){
        return "姓名:" + this.name + ";年齡:" + this.age ;
    }
    public int compareTo(Person per){
        if(this.age>per.age){
            return 1 ;
        }else if(this.age<per.age){
            return -1 ;
        }else{
            return this.name.compareTo(per.name) ; // 呼叫String中的compareTo()方法
        }
    }
}
複製程式碼

程式碼執行的結果為:

  [姓名:張三;年齡:30, 姓名:李四;年齡:31, 姓名:王五;年齡:32, 姓名:孫七;年齡:33, 姓名:趙六;年齡:33]