Java匿名內部類和Lambda(->) 的多種寫法總結
引入: 最近使用到 Arrays.sort(); 看瞭他的重載方法(試著模仿一下)
就以這個玩出瞭許多的方式;如下:自定義排序
首先 寫瞭個冒泡排序(備用)
//給一個integres 的數組, 然後再給個 Comparator的接口 c /** * * @param integers 給一個 integres 的數組,作為要排序的數組 * @param c 接受一個 Comparator 接口 ,然後使用Comparator 重寫的 compare 方法 */ public static void bubbleSort(Integer[] integers,Comparator c ){ int temp; for(int i = 0 ; i < integers.length-1;i++){ for(int j = 0 ; j < integers.length -1 -i;j++){ //判斷是從大到小還是從小到大 if(c.compare(integers[j] , integers[j+1]) > 0){ //慢 /*integers[j] += integers[j+1]; integers[j+1] = integers[j] - integers[j+1]; integers[j] = integers[j] - integers[j+1];*/ //更快 temp = integers[j]; integers[j] = integers[j+1]; integers[j+1] = temp; } } } }
認識幾種寫法
第一種寫法
//第一種寫法 匿名類寫法 bubbleSort(number, new Comparator() { @Override public int compare(Object o1, Object o2) { return (int)o1 - (int)o2; } });
第二種寫法(Lambda)
// 接受2個參數(數字),並返回他們的差值 // (x, y) -> x – y //第二種寫法 bubbleSort(number, (Object o1 ,Object o2)-> (int)o1 - (int)o2);
第三種寫法(Lambda)
/*第三種寫法 * 1.先把Object 轉為 int 然後執行以下操作 * Comparator.comparingInt((Object o) -> (int) o); * * 2.會返回 (c1, c2) -> Integer.compare(keyExtractor.applyAsInt(c1), keyExtractor.applyAsInt(c2)); * 會讀取兩個對象 keyExtractor.applyAsInt(c1) , keyExtractor.applyAsInt(c2) * * 3.(Comparator.comparingInt((Object o) -> (int) o)))讀取一個(keyExtractor.applyAsInt(c1))後返回到這裡(Comparator.comparingInt((Object o) -> (int) o))),然後再讀取一個(keyExtractor.applyAsInt(c2)) * * 4.兩個瞭之後就開始比較Integer.compare * public static int compare(int x, int y) { * return (x < y) ? -1 : ((x == y) ? 0 : 1); * } *5.最後經過三元運算符後 返回對應的數 */ bubbleSort(number, Comparator.comparingInt((Object o) -> (int) o));
然後開始使用
import java.util.Arrays; import java.util.Comparator; public class Test { public static void main(String[] args) { Integer number[] = {1,4,2,23,32,43}; //第一種寫法 bubbleSort(number, new Comparator() { @Override public int compare(Object o1, Object o2) { return (int)o1 - (int)o2; } }); //第二種寫法 //1.先把Object 轉為 int 然後執行以下操作 //Comparator.comparingInt((Object o) -> (int) o); //2.會進去 (c1, c2) -> Integer.compare(keyExtractor.applyAsInt(c1), keyExtractor.applyAsInt(c2)); //然後會讀取兩個對象keyExtractor.applyAsInt(c1) , keyExtractor.applyAsInt(c2) //3.Comparator.comparingInt((Object o) -> (int) o)) 讀取一個後返回到這裡,然後再讀取一個 //4.兩個瞭之後就開始比較Integer.compare // public static int compare(int x, int y) { // return (x < y) ? -1 : ((x == y) ? 0 : 1); // } //5.返回 最後的數 bubbleSort(number, Comparator.comparingInt((Object o) -> (int) o)); //第三種寫法 bubbleSort(number, (Object o1 ,Object o2)-> (int)o1 - (int)o2); System.out.println("排序後的數組"+Arrays.toString(number)); } //給一個integres 的數組, 然後再給個 Comparator的接口 c /** * * @param integers 給一個 integres 的數組,作為要排序的數組 * @param c 接受一個 Comparator 接口 ,然後使用Comparator 重寫的 compare 方法 */ public static void bubbleSort(Integer[] integers,Comparator c ){ int temp; for(int i = 0 ; i < integers.length-1;i++){ for(int j = 0 ; j < integers.length -1 -i;j++){ //判斷是從大到小還是從小到大 if(c.compare(integers[j] , integers[j+1]) > 0){ //慢 /*integers[j] += integers[j+1]; integers[j+1] = integers[j] - integers[j+1]; integers[j] = integers[j] - integers[j+1];*/ //更快 temp = integers[j]; integers[j] = integers[j+1]; integers[j+1] = temp; } } } } }
到此這篇關於Java匿名內部類和Lambda(->) 的多種寫法總結的文章就介紹到這瞭,更多相關Java匿名內部類 Lambda內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 基於Arrays.sort()和lambda表達式
- Java Comparator.comparing比較導致空指針異常的解決
- Java中Lambda表達式用法介紹
- Java Arrays.sort()用法詳解
- 關於JavaEE匿名內部類和Lambda表達式的註意事項