看板 java 關於我們 聯絡資訊
推 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
Argosde: 謝謝解惑, 有測試成功! 10/19 20:21
Argosde: wNDdtY1E 10/19 20:23
Argosde: 上面是測試專案, 內含三種字串顯示方式 10/19 20:24