Guava functional -- Predicate
2016-06-19 18:20
309 查看
Guava全文介绍地址:Google Guava
这次主要介绍是的是com.google.common.base.Predicate.在JDK8之前Java是不能使用函数式编程的,但是Guava给予了我们这样的能力。Predicate就是这样其中的一个类。而且大多数时候Predicate是和Predicates是组合来使用的,Predicate大概有以下用法:
1. Predicate检查传递对象是否满足给定的条件
2. Predicate主要是使用Iterables, Iterators, Collections2等类的filter方法来过滤集合
3. Predicate通常也用Iterables.all()来检测集合中的所有元素满足指定的条件
4. Predicates这个类提供了实用的方法,并且允许多个Predicate组成一样Predicate。这点与Function有点像。
我们首先来看看这个接口的方法。
这个接口与Function有点像,只不过Function返回的是对应的值,而Predicate是返回是否满足条件,返回值为boolean类型。
下面我们根据几个小例子来看这个类的用法。
基础类:
以上差不多就是Predicate类的使用方法,至于其它用法。就看大家去挖掘了。
这次主要介绍是的是com.google.common.base.Predicate.在JDK8之前Java是不能使用函数式编程的,但是Guava给予了我们这样的能力。Predicate就是这样其中的一个类。而且大多数时候Predicate是和Predicates是组合来使用的,Predicate大概有以下用法:
1. Predicate检查传递对象是否满足给定的条件
2. Predicate主要是使用Iterables, Iterators, Collections2等类的filter方法来过滤集合
3. Predicate通常也用Iterables.all()来检测集合中的所有元素满足指定的条件
4. Predicates这个类提供了实用的方法,并且允许多个Predicate组成一样Predicate。这点与Function有点像。
我们首先来看看这个接口的方法。
boolean apply(T input) 返回输入的值应用predicate后的结果 boolean equals(Object object) 判断另一个对象是否等于这个predicate.
这个接口与Function有点像,只不过Function返回的是对应的值,而Predicate是返回是否满足条件,返回值为boolean类型。
下面我们根据几个小例子来看这个类的用法。
基础类:
@Data @NoArgsConstructor @AllArgsConstructor @ToString public class User implements Serializable { /** 身份证号 */ private long idCard; /** 姓名 */ private String name; /** age */ private int age; }
1、判断年龄是否都大于25
@Test public void shouldUseCustomPredicate(){ // given User user1 = new User(1L, "carl",26); User user2 = new User(2L, "kevin", 24); User user3 = new User(3L, "erin", 25); Predicate<User> userAgePredicate = new Predicate<User>() { @Override public boolean apply(User input) { return input.getAge() > 25; } }; // when boolean allUserAgeBeyond25 = Iterables.all(Lists.newArrayList(user1, user2, user3), userAgePredicate); // then assertFalse(allUserAgeBeyond25); }
2、多个Predicate通过Predicates的and(),or(),not()组合使用
@Test public void shouldComposeTwoPredicates(){ // given User user1 = new User(1L, "carl",26); User user2 = new User(2L, "kevin", 24); Predicate<User> userAgePredicate = new Predicate<User>() { @Override public boolean apply(User input) { return input.getAge() > 25; } }; Predicate<User> userNamePredicate = new Predicate<User>() { @Override public boolean apply(User input) { return "carl".equals(input.getName()); } }; Predicate<User> nameAndAgePredicate = Predicates.and(userAgePredicate, userNamePredicate); // when boolean carlAgeBeyond25 = Iterables.all(Lists.newArrayList(user1, user2), nameAndAgePredicate); // then assertFalse(carlAgeBeyond25); }
3、Predicates类的containsPattern方法用于创建条件使用正则表达式
@Test public void shouldCheckPattern() throws Exception { // given Predicate<CharSequence> twoDigitsPredicate = Predicates.containsPattern("\\d\\d"); // then assertThat(twoDigitsPredicate.apply("Hello world 40")).isTrue(); }
4、Predicate类的in方法,用于判断集合中包含对象
@Test public void shouldFindObjectInCollection() throws Exception { // given Predicate elevenInCollectionPredicate = Predicates.in(Arrays.asList(11L, 22L, 33L, 44L)); // then assertThat(elevenInCollectionPredicate.apply(11L)).isTrue(); }
以上差不多就是Predicate类的使用方法,至于其它用法。就看大家去挖掘了。
相关文章推荐
- Linux 字符设备驱动结构(三)—— file、inode结构体及chardevs数组等相关知识解析
- Struts2(四):在Action中如何访问Web资源
- ubuntu 搜狗输入法安装
- JAVA小知识
- maven学习(五)
- Mat的初始化
- 安装RocketMQ及配置测试
- 《Linux内核设计与实现》--进程调度
- Linux 字符设备驱动结构(四)—— file_operations 结构体知识解析
- ubuntu下的快捷方式
- JDBC 简介 JDBC 原理
- Hi3515按键中断驱动程序
- 田园诗两首
- c++DLL编程详解
- 田园诗两首
- hrbust 1382 Split the Points【判断正方形+判断矩形+极角排序】
- 安装JStorm2.1.1
- currentColor
- 安装ZooKeeper
- Linux 字符设备驱动开发基础(一)—— 编写简单 LED 设备驱动