作者JustinHere (良葛格)
看板java
标题Re: [问题] Lambda语法
时间Fri Oct 16 10:18:49 2015
推 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://webptt.com/cn.aspx?n=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
1F:推 Argosde: 谢谢解惑, 有测试成功! 10/19 20:21
3F:→ Argosde: wNDdtY1E 10/19 20:23
4F:→ Argosde: 上面是测试专案, 内含三种字串显示方式 10/19 20:24