日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

在JDT中使用Java 8 Lambda

發(fā)布時(shí)間:2023/12/3 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在JDT中使用Java 8 Lambda 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

舊 Curmudgeon 認(rèn)識(shí)Smalltalk的Dude

在修改Eclipse Java開發(fā)工具 (JDT)項(xiàng)目正在開發(fā)的Java 8支持時(shí),我一直在使用這種語言。

我承認(rèn)我對(duì)Java 8中的lambda有點(diǎn)不滿意。 當(dāng)然,這來自于知道Smalltalk (和LISP / Scheme)的老兄 。

像其他任何優(yōu)秀的Smalltalk中獎(jiǎng)記錄一樣,當(dāng)我著手學(xué)習(xí)如何使用lambda時(shí),我自然決定實(shí)現(xiàn)已知和喜愛的集合。

從這樣的事情開始:

OrderedCollection employees = new OrderedCollection(); employees.add(new Employee("Wayne", 10)); employees.add(new Employee("Joel", 9)); employees.add(new Employee("Jon", 6)); employees.add(new Employee("Anthony", 8)); employees.add(new Employee("Mary", 2)); employees.add(new Employee("Sue", 3)); employees.add(new Employee("Joanne", 7)); employees.add(new Employee("Shridar", 1));

在經(jīng)典Java中,您將執(zhí)行以下操作來尋找具有五年以上經(jīng)驗(yàn)的員工:

List longTerm = new ArrayList(); for(Employee employee : employees) if (employee.years > 5) longTerm.add(employee);

使用lambda,您可以執(zhí)行以下操作:

OrderedCollection longTerm = employees.select(employee -> employee.years > 5);

它比經(jīng)典Java更加嚴(yán)格,我個(gè)人認(rèn)為它非常易讀和易懂; 具有不同經(jīng)驗(yàn)的讀者可能有不同的選擇。 我相信這比匿名類的等效實(shí)現(xiàn)要好得多:

OrderedCollection longTerm = employees.select(new SelectBlock() {@Overridepublic boolean value(Employee employee) {return employee.years > 5;} });

匿名班使嬰兒哭泣。

當(dāng)然,嬰兒也不會(huì)對(duì)select()的實(shí)現(xiàn)特別滿意:

public class OrderedCollection<T> extends ArrayList<T> {...public OrderedCollection<T> select(SelectBlock<T> block) {OrderedCollection<T> select = new OrderedCollection<T>();for(T value : this) {if (block.value(value)) select.add(value);}return select;}... }

Lambda是匿名類的語法糖 ,可以說使某些代碼更易于閱讀。 對(duì)于我的簡(jiǎn)單化示例,從可讀性的角度來看,直接使用for -loop的好處是微不足道的,但比匿名類示例更容易理解。 從性能的角度來看,我希望在這種情況下使用lambda或匿名類比僅使用for -loop差一個(gè)數(shù)量級(jí)。

我們?cè)赟malltalk中做的比較酷的事情之一就是創(chuàng)建自己的控制結(jié)構(gòu)。 您可以創(chuàng)建自定義的迭代器,而不是創(chuàng)建一個(gè)全新的集合,例如:

payroll.longTermEmployeesDo(employee -> payroll.giveEmployeeARaise(employee));

或類似的東西。 我不確定這是否會(huì)更好。

簡(jiǎn)單集合可能不是lambda的最佳用法。 Lambda并不像Smalltalk中的代碼塊那么有用(或者,我相信它有效率)。 我需要花更多時(shí)間修改一些示例,這些示例中Java中使用匿名類更為自然( Runnable和偵聽器似乎是一個(gè)顯而易見的起點(diǎn))。

不幸的是,我認(rèn)為嘗試使用Java 8中的lambda實(shí)現(xiàn)類似于Smalltalk的集合也會(huì)使嬰兒哭泣。

作為分手,請(qǐng)嘗試?yán)@開您的大腦:

double average = (double)employees.inject(0, (sum, employee) -> sum + employee.years) / employees.size();

完全可讀。 完全。

于2014年2月18日修改。 最初的觀察使我相信lambda是匿名類的語法糖。 從那以后,我得知情況并非如此。 此外,我需要更好地理解一些優(yōu)化。 我刪除了不正確的陳述(但為了后代而留了它)。

參考: Eclipse提示,技巧和Random Musings博客上的JCG合作伙伴 Wayne Beaton在JDT中使用Java 8 Lambdas玩游戲 。

翻譯自: https://www.javacodegeeks.com/2014/02/playing-with-java-8-lambdas-in-the-jdt.html

總結(jié)

以上是生活随笔為你收集整理的在JDT中使用Java 8 Lambda的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。