Java匿名內(nèi)部類和Lambda(->) 的多種寫法總結(jié)
引入: 最近使用到 Arrays.sort(); 看了他的重載方法(試著模仿一下)

就以這個(gè)玩出了許多的方式;如下:自定義排序
首先 寫了個(gè)冒泡排序(備用)
//給一個(gè)integres 的數(shù)組, 然后再給個(gè) Comparator的接口 c
/**
*
* @param integers 給一個(gè) integres 的數(shù)組,作為要排序的數(shù)組
* @param c 接受一個(gè) 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;
}
}
}
}
認(rèn)識(shí)幾種寫法
第一種寫法
//第一種寫法 匿名類寫法
bubbleSort(number, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return (int)o1 - (int)o2;
}
});
第二種寫法(Lambda)
// 接受2個(gè)參數(shù)(數(shù)字),并返回他們的差值
// (x, y) -> x – y
//第二種寫法
bubbleSort(number, (Object o1 ,Object o2)-> (int)o1 - (int)o2);
第三種寫法(Lambda)
/*第三種寫法
* 1.先把Object 轉(zhuǎn)為 int 然后執(zhí)行以下操作
* Comparator.comparingInt((Object o) -> (int) o);
*
* 2.會(huì)返回 (c1, c2) -> Integer.compare(keyExtractor.applyAsInt(c1), keyExtractor.applyAsInt(c2));
* 會(huì)讀取兩個(gè)對(duì)象 keyExtractor.applyAsInt(c1) , keyExtractor.applyAsInt(c2)
*
* 3.(Comparator.comparingInt((Object o) -> (int) o)))讀取一個(gè)(keyExtractor.applyAsInt(c1))后返回到這里(Comparator.comparingInt((Object o) -> (int) o))),然后再讀取一個(gè)(keyExtractor.applyAsInt(c2))
*
* 4.兩個(gè)了之后就開始比較Integer.compare
* public static int compare(int x, int y) {
* return (x < y) ? -1 : ((x == y) ? 0 : 1);
* }
*5.最后經(jīng)過三元運(yùn)算符后 返回對(duì)應(yīng)的數(shù)
*/
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 轉(zhuǎn)為 int 然后執(zhí)行以下操作
//Comparator.comparingInt((Object o) -> (int) o);
//2.會(huì)進(jìn)去 (c1, c2) -> Integer.compare(keyExtractor.applyAsInt(c1), keyExtractor.applyAsInt(c2));
//然后會(huì)讀取兩個(gè)對(duì)象keyExtractor.applyAsInt(c1) , keyExtractor.applyAsInt(c2)
//3.Comparator.comparingInt((Object o) -> (int) o)) 讀取一個(gè)后返回到這里,然后再讀取一個(gè)
//4.兩個(gè)了之后就開始比較Integer.compare
// public static int compare(int x, int y) {
// return (x < y) ? -1 : ((x == y) ? 0 : 1);
// }
//5.返回 最后的數(shù)
bubbleSort(number, Comparator.comparingInt((Object o) -> (int) o));
//第三種寫法
bubbleSort(number, (Object o1 ,Object o2)-> (int)o1 - (int)o2);
System.out.println("排序后的數(shù)組"+Arrays.toString(number));
}
//給一個(gè)integres 的數(shù)組, 然后再給個(gè) Comparator的接口 c
/**
*
* @param integers 給一個(gè) integres 的數(shù)組,作為要排序的數(shù)組
* @param c 接受一個(gè) 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;
}
}
}
}
}到此這篇關(guān)于Java匿名內(nèi)部類和Lambda(->) 的多種寫法總結(jié)的文章就介紹到這了,更多相關(guān)Java匿名內(nèi)部類 Lambda內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 文件傳輸助手的實(shí)現(xiàn)(單機(jī)版)
這篇文章主要介紹了Java 文件傳輸助手的實(shí)現(xiàn)(單機(jī)版),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
Spring?Cloud?Gateway動(dòng)態(tài)路由Apollo實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Spring?Cloud?Gateway動(dòng)態(tài)路由通過Apollo實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Spring如何在一個(gè)事務(wù)中開啟另一個(gè)事務(wù)
這篇文章主要介紹了Spring如何在一個(gè)事務(wù)中開啟另一個(gè)事務(wù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
SpringBoot讀取resource文件代碼實(shí)例
這篇文章主要介紹了SpringBoot讀取resource文件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04

