使用NetBeans Lambda支持在Java 8中使用Lambda表达式对列表进行排序
作為JSR 335的一部分, Lambda表達式已從Java 8開始引入Java語言,這是Java語言的一個重大變化。 如果您想了解更多關于Lambda表達式以及JSR 335的信息,可以訪問以下資源:
- 在OpenJDK上的Lambda項目 。
- Lambda常見問題解答 。
- 另一篇詳細討論lambda表達式支持的博客文章
- JSR 335的規范草案 。
如果我研究作為JSR 335一部分進行的每項功能/更改,那么這對我以及您都會感到困惑。 因此,為了使更改更容易理解,我將選擇一些用例,并嘗試應用作為JSR一部分添加的功能。 在開始之前,您必須下載支持lambda表達式語法的Netbeans版本以及具有JSR 335更改的JDK構建。
- 可以從此處下載具有JSR 335更改的JDK構建,即對lambda表達式的支持以及對collections API的增強。
- Netbeans具有對Lambda表達式的實驗支持。
一旦下載了Netbeans每晚構建zip,您將必須解壓縮內容,然后導航到bin目錄以啟動Netbeans。 并且,一旦下載并提取了具有JSR335支持的JDK的內容,就必須在Netbeans中的“工具”->“ Java平臺”菜單中創建一個新平臺,以便在JSR335更改后使用JDK。 添加Java平臺彈出窗口類似于:
現在讓我們考慮一個包含以下內容的列表作為示例:
List<Person> personList = new ArrayList<>(); personList.add(new Person('Virat', 'Kohli')); personList.add(new Person('Arun', 'Kumar')); personList.add(new Person('Rajesh', 'Mohan')); personList.add(new Person('Rahul', 'Dravid'));并允許使用Java 8之前的版本或當前的方法根據firstName對列表進行排序:
//Sorting using Anonymous Inner class. Collections.sort(personList, new Comparator<Person>(){public int compare(Person p1, Person p2){return p1.firstName.compareTo(p2.firstName);} }); 如果您正在使用支持Lambda表達式的Netbeans夜間構建 ,則IDE將提供提示,內容為:
然后使用Netbeans支持將上面的代碼替換為Lambda表達式,我們得到:
//Anonymous Inner class replaced with Lambda expression. Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName));人們可以看到使用Lambda表達式所減少的冗長程度。 而且現在的代碼比使用Anonymous內部類時更清晰。 通過從參數中刪除類型信息,可以使它更加簡潔,因為從使用lambda表達式的上下文中可以推斷出類型信息。
//Lambda expression with type information removed. Collections.sort(personList, (p1, p2) -> p1.firstName.compareTo(p2.firstName));讓我們剖析上述lambda表達式以了解其組成部分。 Lambda表達式的一般語法為:()-> {} OR()->單個語句/表達式。 當lambda表達式的主體必須是一個塊時,將使用()-> {}版本,而當lambda表達式具有單個語句/表達式時,將使用另一個版本。 在上述情況下,只有一個表達式,因此此處不使用塊。 ()用于聲明lambda表達式的參數。 參數可以具有類型信息,或者如果可以從上下文中推斷出類型,則可以跳過這些參數。 在我們的例子中,類型信息是從上下文中推斷出來的。 另一個觀察結果是,lambda表達式等效于覆蓋Comparator類中存在的compare方法。 并且它還替換了創建Anonymous Inner類的代碼,以擴展Comparator類。
可以對上述代碼進行的另一項更改是,“排序”方法已作為JSR 335更改的一部分添加到List類中,我們可以使用該方法對列表進行排序:
//Using sort method in List. personList.sort((p1, p2) -> p1.firstName.compareTo(p2.firstName)); 請注意,排序類存在于List類中,該類是支持JSR 335的JDK的一部分。 這只是在現有代碼中使用Lambda表達式的示例示例。 有關更多詳細信息,請訪問我在帖子開頭分享的鏈接。
參考: 在我們的JCG合作伙伴 Mohamed Sanaulla的“ 經驗無限”博客中, 使用NetBeans Lambda支持使用Lambda表達式對Java 8中的列表進行排序 。
翻譯自: https://www.javacodegeeks.com/2013/03/using-lambda-expression-to-sort-a-list-in-java-8-using-netbeans-lambda-support.html
總結
以上是生活随笔為你收集整理的使用NetBeans Lambda支持在Java 8中使用Lambda表达式对列表进行排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑cpu2018天阶图(电脑cpu性能
- 下一篇: 小米电脑怎么恢复出厂设置笔记本电脑如何恢