Re: [翻譯] Java 8 取出 Collection element 的方式

看板java作者 (痞子軍團團長)時間11年前 (2013/04/03 14:17), 編輯推噓2(2013)
留言15則, 7人參與, 最新討論串2/4 (看更多)
來閒聊一下... ※ 引述《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

04/03 14:24, , 1F
這個範例...第一種寫法感覺比較簡潔啊 囧"
04/03 14:24, 1F

04/03 14:35, , 2F
這你得真的去寫寫看才會有感覺
04/03 14:35, 2F

04/03 14:38, , 3F
lambda可以照著思緒一路往下寫,而且少了區塊和額外宣告
04/03 14:38, 3F

04/03 14:42, , 4F
如果真的開始用,應該就回不去了.不過Java設計得稍嫌累贅.
04/03 14:42, 4F

04/03 14:44, , 5F
推文間隔時間設定得真長啊.. O_O"
04/03 14:44, 5F

04/03 15:02, , 6F
python:filter(lambda x:x=='aa',['aa','bb','aa'])
04/03 15:02, 6F

04/03 15:55, , 7F
C#: over30 = personList.Where(p => p.age >= 30).ToList()
04/03 15:55, 7F

04/03 15:58, , 8F
Stream看起來類似C#的IEnumerable介面,只是List沒直接實作
04/03 15:58, 8F

04/03 15:59, , 9F
還有collect的語法有點多餘,應該也要有個簡潔版
04/03 15:59, 9F

04/03 16:09, , 10F
http://ppt.cc/73wf 這是 List 的 api
04/03 16:09, 10F

04/03 16:11, , 11F
為什麼我找不到 Stream 這個函數 !!
04/03 16:11, 11F

04/03 16:14, , 12F
default method 好像不會放在物件的 api 裡面..
04/03 16:14, 12F

04/03 16:58, , 13F
看到java變成這樣~有點難過阿
04/03 16:58, 13F

04/03 17:44, , 14F
又不是舊的語法整個不見 XDDD
04/03 17:44, 14F

04/03 18:59, , 15F
ruby: personList.select { |p| p.age >= 30 }
04/03 18:59, 15F
文章代碼(AID): #1HMybx0t (java)
討論串 (同標題文章)
文章代碼(AID): #1HMybx0t (java)