Re: [問題] Lambda語法

看板java作者 (良葛格)時間8年前 (2015/10/16 10:18), 8年前編輯推噓1(103)
留言4則, 1人參與, 最新討論串4/4 (看更多)
推 Argosde: order 1-n* orderDetail 1-1* product 10/15 22:36 → Argosde: filter會變成 getOrderdetails().stream().anyMatch(...) 10/15 22:39 → Argosde: 這樣filter會篩選到orderDetails嗎? 10/15 22:41 那是我看錯了,不過道理還是一樣,第一步是過濾出 Order,然後再對 Order 中的細節做過濾與處理(轉為字串描述),第三步則是顯示結果 … 這問題其實很有趣,也是重構 for 迴圈時不錯的案例… orders.stream() .filter(order -> anyAmountGTFiveAndHasProduct(order)) // 符合的 Order .map(order -> descOfAmountGTFiveAndHasProduct(order)) // 細節描述 .forEach(out::println); // 顯示 public static boolean anyAmountGTFiveAndHasProduct(Order order) { return order.getOrdertails().stream().anyMatch( detail -> isAmountGTFiveAndHasProduct(detail)); } public static String descOfAmountGTFiveAndHasProduct(Order order) { return order.getOrdertails().stream() .filter(detail -> isAmountGTFiveAndHasProduct(detail)) .map(detail -> String.format("%s Buy %s * %d", order.getId(), detail.getProduct().getName(), detail.getAmount())) .collect(joining("%n")); } public static boolean isAmountGTFiveAndHasProduct(OrderDetail detail) { return detail.getAmount() > 5 && detail.getProduct() != null; } -- 良葛格學習筆記 http://openhome.cc -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.12.84.34 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1444961932.A.F12.html ※ 編輯: JustinHere (101.12.84.34), 10/16/2015 10:31:53 ※ 編輯: JustinHere (101.8.80.141), 10/16/2015 13:05:23

10/19 20:21, , 1F
謝謝解惑, 有測試成功!
10/19 20:21, 1F

10/19 20:23, , 3F
wNDdtY1E
10/19 20:23, 3F

10/19 20:24, , 4F
上面是測試專案, 內含三種字串顯示方式
10/19 20:24, 4F
文章代碼(AID): #1M85wCyI (java)
文章代碼(AID): #1M85wCyI (java)