带有谓词的Java中的函数样式-第2部分
// check with the always-true predicate
final Iterable<PurchaseOrder> all = orders.selectOrders(Predicates.<PurchaseOrder> alwaysTrue());
assertEquals(2, Iterables.size(all));// check with the always-false predicate
assertTrue(Iterables.isEmpty(orders.selectOrders(Predicates.<PurchaseOrder> alwaysFalse())));
final CustomerPredicate isForCustomer1 = new CustomerPredicate(CUSTOMER_1);
assertTrue(isForCustomer1.apply(ORDER_1)); // ORDER_1 is for CUSTOMER_1
assertFalse(isForCustomer1.apply(ORDER_2)); // ORDER_2 is for CUSTOMER_2
public interface CustomerSpecific {Customer getCustomer();
}
public final class CustomerPredicate implements Predicate<CustomerSpecific>, CustomerSpecific {private final Customer customer;// valued constructor omitted for claritypublic Customer getCustomer() {return customer;}public boolean apply(CustomerSpecific specific) {return specific.getCustomer().equals(customer);}
}
public Iterable<PurchaseOrder> selectOrders(Predicate<? super PurchaseOrder> condition) {return Iterables.filter(orders, condition);
}
/** Optimization method: pre-computed list of pending orders */
private Iterable<PurchaseOrder> selectPendingOrders() {// ... optimized stuff...
}public Iterable<PurchaseOrder> selectOrders(Predicate<? super PurchaseOrder> condition) {// internal complicity here: recognize friend class to enable optimizationif (condition instanceof PendingOrderPredicate) {return selectPendingOrders();// faster way}// otherwise, back to the usual casereturn Iterables.filter(orders, condition);
}
public final class StockPredicate implements Predicate<String> {private final Set<String> tickers;// Constructors omitted for claritypublic boolean apply(String ticker) {return tickers.contains(ticker);}}
public boolean encompasses(StockPredicate predicate) {return tickers.containsAll(predicate.tickers);}
包含是关于评估“包含”的另一个谓词 。 当谓词基于集合(如示例中)或基于数字或日期的间隔时,这很容易。 否则,您可能不得不诉诸类似于Friend Complicity的技巧,即以个案的方式识别另一个谓词,以决定是否包含该谓词。
翻译自: https://www.javacodegeeks.com/2012/05/functional-style-in-java-with_23.html
带有谓词的Java中的函数样式-第2部分相关推荐
- java 7.函数-递归_带有谓词的Java中的函数样式-第1部分
java 7.函数-递归 您一直在听到将要席卷全球的函数式编程,而您仍然坚持使用普通Java? 不用担心,因为您已经可以在日常Java中添加一些功能样式. 此外,它很有趣,可以节省许多代码行并减少错误 ...
- java 7.函数-递归_带有谓词的Java中的函数样式-第2部分
java 7.函数-递归 在本文的第一部分中,我们介绍了谓词,这些谓词通过具有返回true或false的单一方法的简单接口,为Java等面向对象的语言带来了函数式编程的某些好处. 在第二部分和最后一部 ...
- 带有谓词的Java中的功能样式-第1部分
您一直在听到将要席卷全球的函数式编程,而您仍然坚持使用普通Java? 不用担心,因为您已经可以在日常Java中添加一些功能样式. 此外,它很有趣,可以节省许多代码行并减少错误. 什么是谓词? 实际上, ...
- Java中的函数传递
转载自 Java中的函数传递 在C和C++中,函数的传递可以通过函数指针来实现.在C#中,函数传递可以通过委托.Action.Func来实现.Java中没有函数指针.没有委托,那函数要如何传递呢? ...
- java 柯里化_函数式编程(Java描述)——Java中的函数及其柯里化
本文继续上一篇的内容 在Java中,函数可以表现为一个普通的方法.一个lambda表达式,又或者方法引用,甚至是匿名类.本文不会介绍匿名类这种形式. 方法 Java中的方法,Java使用方法这一概念来 ...
- Java中split函数的用法及使用示例
Java中split函数的用法及使用示例 2010-05-04 10:21 日志原文:http://lhgc.blog.sohu.com/80444801.html java.lang.string. ...
- java秃顶_【本人秃顶程序员】在Java中使用函数范式提高代码质量
←←←←←←←←←←←← 快!点关注 在一个范式和技术堆栈一直在变化的世界中,保持竞争力和提高生产力和质量的斗争有时候证明是一项挑战. 在本文中,我想首先展示一下函数编程(FP)的优势,特别是加强Ja ...
- Java中Math函数的使用
Java中Math函数的使用 说到Java中的Math函数,大家肯定不陌生,但是在真正使用的时候却犯了难,那么多方法,我们到底需要使用哪个呢? 为此,我特地研究了一些Math常用函数的使用,以方便大家 ...
- java中sort函数的使用
java中sort函数的使用 写在前面 sort函数的基本格式 第一种基本格式 第二种基本格式 第三种基本格式cmp 函数的基本格式 写在前面 想必大家都知道C++里面的sort用过的都知道这个函数是 ...
最新文章
- css div漂浮向下,DIV+CSS固定底部的漂浮广告
- linux组群账户存放在,linux用户和群组
- Hadoop辅助工具——Flume、Sqoop
- 使用apache配置基于IP地址的虚拟主机
- GetDisplayName 获取枚举的显示值
- hashlib 模块用来进行hash
- 关于vue.js 编程导航的使用:实现路由配置和跳转页面
- 技术实践丨列存表并发更新时的锁等待问题原理
- oracle 历史查询是哪个机器发起的,Oracle 查询历史连接主机信息
- realme系统服务器代码,解锁BL之后,Realme正式开放源代码
- Unity3D 代码优化
- 博途wincc 与 sql 连接操作(博途V14 wincc advanced)
- 易语言 内存调用html文件夹,将文件移到指定文件夹 易语言移动文件到指定文件夹内...
- 论福禄克DTX-1800如何测试CAT7网线?
- 构造器模式(Builder模式)
- ThreadLocal 源码之 expungeStaleEntry
- 阿里云mysql导出表,导出mysql表数据库
- STP的BPDU报文类型
- [车联网安全自学篇] ATTACK安全之交互式/非交互式Shell和登录式/非登录式Shell的检测
- 线程死锁、锁死、饥饿、活锁讲解
热门文章
- Spring IOC 容器启动、Bean生命周期详解
- POJ3278(BFS)
- elk入门_ELK堆栈入门
- 魔术方法 类 序列化_Java序列化魔术方法及其示例使用
- mockito java_Java:使用Mockito模拟ResultSet
- java附加属性_Java 9附加流
- ssm影城项目_影场与属性访问器界面
- junit测试找不到数据库_将数据库日志添加到JUnit3
- spicy命令_Spicy Spring:动态创建自己的BeanDefinition
- JUnit5 TestSuite替代