java 板


LINE

方向不太对,仔细看原本的 for 回圈,其实主要是在 filter 出想要的 Order ,才从後续留下的 Order 取得细节,因此,比较好的写法是: orders.stream() .filter(order -> order.getOrdertails().getAmount() > 5 && order.getOrderDetail().getProduct() != null) .forEach(order -> { OrderDetail orderDetail = order.getOrdertails() String s = String.format("%s Buy %s * %d", order.getId(), orderDetail.getProduct().getName(), orderDetail.getAmount()); System.out.println(s); }); 关键在於,原本的 for 回圈用了两个 if,其实就是 && 两个情况的意思 … 当然,如果想要更读性更好一些,可以将 filter 与 forEach 中的逻辑提取至方法, 然後用方法参考: orders.stream() .filter(OrderUtil::amountGTFiveAndHasProduct) .forEach(OrderUtil::printIdNameAmount); public class OrderUtil { public static boolean amountGTFiveAndHasProduct(Order order) { return order.getOrdertails().getAmount() > 5 && order.getOrderDetail().getProduct() != null; } public static void printIdNameAmount(Order order) { OrderDetail orderDetail = order.getOrdertails() String s = String.format("%s Buy %s * %d", order.getId(), orderDetail.getProduct().getName(), orderDetail.getAmount()); System.out.println(s); } } ※ 引述《kojilin (阿~~小达达)》之铭言: : ※ 引述《Argosde ()》之铭言: : : 最近在学Java8 Lambda语法 : : 自己在练习两层for回圈的重构 : : 遇到一个状况,不知道是我使用观念错误还是有不知道的方法 : : 两层For回圈版本 : : for(Order order : orders){ : : for(OrderDetail orderDetail : order.getOrdertails()){ : : if(orderDetail.getAmount()>5){ : : Product product = orderDetail.getProduct(); : : if(product!=null){ : : String s = String.format("%s Buy %s * %d", order.getId(), product.getName(), orderDetail.getAmount()); : : System.out.println(s); : : } : : } : : } : : } : : Lambda版本 : : orders.stream() : : .flatMap(order -> order.getOrdertails().stream()) : : .filter(orderDetail -> ordertail.getAmount()>5) : : .map(orderDetail1 -> orderDetail1.getProduct()) : : .forEach(product -> { : : ? : : }); : : 在?的地方没办法呼叫到上层资料,不知道是不是Lambda不适用这种状况还是有其他方法 : : 第一次发问,请多指教... : 这种情况下我就不一定会用 stream, 但你真要做可以像这样,建一个容器 : class Pair<T1, T2> : 然後 : orders.stream() : .flatMap(order -> order.getOrdertails().stream() : .map(detail -> new Pair<>(order, detail))) : .filter(orderDetail -> orderDetail.getT2().getAmount() > 5) : .map(orderDetail -> new Pair<>(orderDetail, orderDetail.getT2().getProduct())) : .forEach(product -> { : }); : 另一种就是丑一点,巢状 stream,但程式码就更难读@@... : orders.stream() : .forEach(order -> order.getOrdertails() : .stream() : .filter(orderDetail -> orderDetail.getAmount() > 5) : .forEach(orderDetail -> { : })); : koji -- 良葛格学习笔记 http://openhome.cc --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 101.12.85.15
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1444785384.A.1BD.html ※ 编辑: JustinHere (101.12.85.15), 10/14/2015 09:21:21 ※ 编辑: JustinHere (101.12.85.15), 10/14/2015 09:23:31 ※ 编辑: JustinHere (101.12.85.15), 10/14/2015 09:24:22 ※ 编辑: JustinHere (101.12.85.15), 10/14/2015 10:57:54
1F:推 james732: 推良葛格 10/14 11:06
2F:→ swpoker: 其实都lambda 当然函式也要匿名阿 10/14 15:20
3F:推 Argosde: order 1-n* orderDetail 1-1* product 10/15 22:36
4F:→ Argosde: filter会变成 getOrderdetails().stream().anyMatch(...) 10/15 22:39
5F:→ Argosde: 这样filter会筛选到orderDetails吗? 10/15 22:41







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP