lambda – 使用Java 8流迭代两个列表
发布时间:2020-12-15 04:45:55 所属栏目:Java 来源:网络整理
导读:如何在 Java 8流中编写以下内容? int total = 0; for (ObjectA obja : rootObj.getListA()) { for (ObjectB objb : obja.getListB()) { total += objb.getCount() * obja.getCount(); } }return total; 解决方法 用于将嵌套for循环转换为Stream API用法的规
如何在
Java 8流中编写以下内容?
int total = 0; for (ObjectA obja : rootObj.getListA()) { for (ObjectB objb : obja.getListB()) { total += objb.getCount() * obja.getCount(); } } return total; 解决方法
用于将嵌套for循环转换为Stream API用法的规范解决方案是通过flatMap:
return rootObj.getListA().stream() .flatMapToInt(objA->objA.getListB().stream() .mapToInt(objB->objB.getCount() * objA.getCount())) .sum(); 这允许您为每个内部迭代执行操作.但是,在求和的特殊情况下,您可以简化操作,因为无论您计算(a b c d)还是(a b)(c d)都无关紧要: return rootObj.getListA().stream() .mapToInt(objA->objA.getListB().stream() .mapToInt(objB->objB.getCount() * objA.getCount()).sum()) .sum(); 当我们记住基本算术时,我们也应该记得(a * x)(b * x)等于(ab)* x,换句话说,没有必要将ListB的每个项目与objA因为我们也可以将该计数的结果加倍: return rootObj.getListA().stream() .mapToInt(objA->objA.getListB().stream().mapToInt(ObjectB::getCount).sum()*objA.getCount()) .sum(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |