看板 java 關於我們 聯絡資訊
來閒聊一下... ※ 引述《PsMonkey (痞子軍團團長)》之銘言: : 要找出 `Person` 的年齡大於 30 的 instance,我們會這樣作: : List<Person> olderThan30OldWay = new ArrayList<>(); : for ( Person p : personList){ : if ( p.age >= 30){ : olderThan30OldWay.add(p); : } : } : 簡單介紹要用的 API 之後,讓我來展示一下跟第一個範例等意的程式碼: : List<Person> olderThan30 = : personList.stream(). : filter(p -> p.age >= 30). : collect(Collectors.toCollection(() -> new ArrayList<Person>())); : 上面的程式碼使用內部迴圈以及 lambda expression : 讓它看起來直覺、簡潔、還可以舒緩眼睛不適。 : (譯註:我承認最後一個是惡搞亂翻的 [逃]) 說真的,我覺得這個範例糟糕透了 怎麼看都覺得第一個比較簡單阿... [翻桌] 不然光比較字數也可以阿... Orz 所以我實在忍不住,翻譯上就吐槽了一下 (原文是 soothing to the eye) 當然,也許寫習慣 functional language 的人 會覺得第二種比較直覺 [跪拜之 Orz] 可能在其他(更複雜?)的 case 當中 lambda expression 的寫法會比第一種簡潔許多 我也是看好這種語法(尤其在 Collection 上) 至少像 Objectify 這類型的 library 可以更強大? 雖然我自己可能打死都不會想去用就是了 [死] -- 錢鍾書: 說出來的話 http://www.psmonkey.org 比不上不說出來的話 Java 版 cookcomic 版 只影射著說不出來的話 and more...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.29.173
luoqr:這個範例...第一種寫法感覺比較簡潔啊 囧" 04/03 14:24
iterator:這你得真的去寫寫看才會有感覺 04/03 14:35
iterator:lambda可以照著思緒一路往下寫,而且少了區塊和額外宣告 04/03 14:38
iterator:如果真的開始用,應該就回不去了.不過Java設計得稍嫌累贅. 04/03 14:42
iterator:推文間隔時間設定得真長啊.. O_O" 04/03 14:44
swpoker:python:filter(lambda x:x=='aa',['aa','bb','aa']) 04/03 15:02
ssccg:C#: over30 = personList.Where(p => p.age >= 30).ToList() 04/03 15:55
ssccg:Stream看起來類似C#的IEnumerable介面,只是List沒直接實作 04/03 15:58
ssccg:還有collect的語法有點多餘,應該也要有個簡潔版 04/03 15:59
cyclone350:http://ppt.cc/73wf 這是 List 的 api 04/03 16:09
cyclone350:為什麼我找不到 Stream 這個函數 !! 04/03 16:11
cyclone350:default method 好像不會放在物件的 api 裡面.. 04/03 16:14
swpoker:看到java變成這樣~有點難過阿 04/03 16:58
PsMonkey:又不是舊的語法整個不見 XDDD 04/03 17:44
mars90226:ruby: personList.select { |p| p.age >= 30 } 04/03 18:59