您好,登錄后才能下訂單哦!
本篇內容介紹了“JDK1.8有什么新的特性”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Lambda表達式是一種匿名函數,基于數學中的λ
演算得名,簡單地說,它是沒有聲明的方法,即:沒有名稱,但它有參數列表、方法主體、返回類型,可能還有可以拋出的異常。
它可以寫出更簡潔、更靈活的代碼。作為一種更緊湊的代碼風格,使Java語言的表達能力得到了提升。
例如,擁有People
對象的List
集合peopleList
,需要對age
進行排序。
之前:
// 創建People比較器 Comparator<People> comparator = new Comparator<People>() { @Override public int compare(People o1, People o2) { if (o1.getAge() > o2.getAge()) { return 1; } else { return -1; } } }; // 排序 Collections.sort(peopleList, comparator);
JDK1.8后,使用Lambda表達式:
// Lambda表達式方式 Comparator<People> comparator = (o1, o2) -> { if (o1.getAge() > o2.getAge()) { return 1; } else { return -1; } }; // 排序 Collections.sort(peopleList, comparator);
不得不承認代碼更清晰、簡潔了!
其實,更簡潔的寫法如下:
peopleList.sort(Comparator.comparingInt(People::getAge));
Lambda表達式的語法格式如下:
(parameters) -> expression
或
(parameters) ->{ statements; }
其中:
可選類型聲明:不需要聲明參數類型,編譯器可以統一識別參數值。
可選的參數圓括號:一個參數無需定義圓括號,但多個參數需要定義圓括號。
可選的大括號:如果主體包含了一個語句,就不需要使用大括號。
可選的返回關鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定明表達式返回了一個數值。
語法很簡單,學會使用后,你會愛上它的!
簡單實例如下:
// 1. 不需要參數,返回值為 5 () -> 5 // 2. 接收一個參數(數字類型),返回其2倍的值 x -> 2 * x // 3. 接受2個參數(數字),并返回他們的差值 (x, y) -> x – y // 4. 接收2個int型整數,返回他們的和 (int x, int y) -> x + y // 5. 接受一個 string 對象,并在控制臺打印,不返回任何值(看起來像是返回void) (String s) -> System.out.print(s)
使用場景:
使用場景 | Lambda表達式示例 |
---|---|
布爾表達式 | (List<String> list) -> list.isEmpty() |
創建對象 | () -> new People(10) |
消費一個對象 | (People p) -> {System.out.println(p.getAge());} |
從一個對象中選擇/抽取 | (int i) -> i.getAge() |
組合兩個值 | (int a, int b) -> a * b |
比較兩個對象 | (People p1, People p2) -> p1.getAge().compareTo(p2.getAge()) |
舉例如下:
/** * 集合操作。如:List遍歷 */ // 傳統方式 for (People people : peopleList) { System.out.print(people.getName()); } // Lambda表達式 peopleList.forEach(people -> System.out.print(people.getName())); /** * 創建線程 */ // 傳統方式 new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } }).start(); // Lambda表達式 new Thread(() -> System.out.println(Thread.currentThread().getName())).start(); ……
針對JDK1.8新特性,在IDEA中也是極力推薦的。對于可以使用Lambda表達式的地方,IDEA會將對應代碼進行置灰,并標記為波浪線,給出提示建議,我們可以使用快捷鍵Alt + Enter
進行自動替換為Lambda寫法,是不是很棒。
初步了解了Lambda表達式之后,是不是覺得很簡單,至少簡潔了很多(其實在性能方面也有一定的提升呢)。
Lambda表達式在后續學習JDK1.8新特性中,還會很常見的。雖然語法很簡單,但是要想更好的使用它,還得多多使用。在日常的開發中,多往Lambda表達式方面想想,很快你就會熟練的,并會更愛它。
“JDK1.8有什么新的特性”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。