Java中Comparator的使用


在某些特殊情況,我們需要對一個對象數組或集合依照對應的屬性排序;此時,我們就可以用Comparator接口處理。

上代碼

TestComparaTo 類
 1 package com.test.interfacetest;
 2 
 3 public class TestComparaTo implements Comparable<TestComparaTo>{
 4  private int id;
 5  private String name;
 6  
 7  public int getId() {
 8   return id;
 9  }
10 
11  public void setId(int id) {
12   this.id = id;
13  }
14 
15  public String getName() {
16   return name;
17  }
18 
19  public void setName(String name) {
20   this.name = name;
21  }
22 
23  @Override
24  public int compareTo(TestComparaTo o) {
25   return Integer.compare(id, o.getId());
26  }
27 
28 }

 

MainClass類

 1 import java.util.Arrays;
 2 import java.util.Collections;
 3 import java.util.List;
 4 
 5 import com.test.interfacetest.TestComparaTo;
 6 
 7 public class MainClass {
 8 
 9  public static void main(String[] args) {
10   TestComparaTo testComparaTo = new TestComparaTo();
11   testComparaTo.setId(21);
12   testComparaTo.setName("鑽石王老五");
13 
14   TestComparaTo testComparaTo1 = new TestComparaTo();
15   testComparaTo1.setId(15);
16   testComparaTo1.setName("島市老八");
17 
18   TestComparaTo testComparaTo2 = new TestComparaTo();
19   testComparaTo2.setId(19);
20   testComparaTo2.setName("蕪湖大司馬");
21 
22   
23   TestComparaTo[] s = {testComparaTo,testComparaTo1,testComparaTo2};
24   List<TestComparaTo> asList = Arrays.asList(s);
25   
26 
27   System.out.println("排序前集合內容:");
28   for(TestComparaTo obj : asList) {
29    System.out.println(obj.getName()+"id為:"+obj.getId());
30   }
31 
32   System.out.println("排序前數組內容:");
33   for(TestComparaTo obj : s) {
34    System.out.println(obj.getName()+"id為:"+obj.getId());
35   }
36 
37   
38   
39   Arrays.sort(s);
40   Collections.sort(asList);
41 
42   System.out.println("排序后集合內容:");
43   for(TestComparaTo obj : asList) {
44    System.out.println(obj.getName()+"id為:"+obj.getId());
45   }
46   System.out.println("排序后數組內容:");
47   for(TestComparaTo obj : s) {
48    System.out.println(obj.getName()+"id為:"+obj.getId());
49   }
50   
51   
52  }
53 
54 }

總結就是:實現comparable接口的comparaTo方法,然后數組用Array的sort方法排序,集合用collection的sort方法排序。

 

 

在Java8后,可以運用lambda表達式使得Comparator使用起來更簡單

例如下面四種方法

 1 //以下第一個參數a、b、c、d是TestComparaTo類的實例化對象的數組,對該數組排序
 2 
 3 //根據TestComparaTo類的name屬性排序
 4 Arrays.sort(a,Comparator.comparing(TestComparaTo::getName)); 
 5 
 6 //如果name相同則根據id排序
 7 Arrays.sort(b,Comparator.comparing(TestComparaTo::getName).thenComparing(TestComparaTo::getId));
 8 
 9 //根據name長度排序      
10 Arrays.sort(c,Comparator.comparing(TestComparaTo::getName,(a,t)->Integer.compare(a.length(), t.length()))); 
11 
12  //根據name長度排序  顯然這個比上一個更簡單
13 Arrays.sort(d,Comparator.comparingInt(a -> a.getName().length()));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM