Re: [問題] Lambda語法
推 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:22, , 2F
10/19 20:22, 2F
→
10/19 20:23, , 3F
10/19 20:23, 3F
→
10/19 20:24, , 4F
10/19 20:24, 4F
討論串 (同標題文章)