Guava functional -- Predicate
发布日期:2021-06-29 12:51:44
浏览次数:2
分类:技术文章
本文共 3018 字,大约阅读时间需要 10 分钟。
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有点像。 我们首先来看看这个接口的方法。boolean apply(T input)返回输入的值应用predicate后的结果boolean equals(Object object)判断另一个对象是否等于这个predicate.
这个接口与Function有点像,只不过Function返回的是对应的值,而Predicate是返回是否满足条件,返回值为boolean类型。
下面我们根据几个小例子来看这个类的用法。 基础类:@Data@NoArgsConstructor@AllArgsConstructor@ToStringpublic 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); PredicateuserAgePredicate = new Predicate () { @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); PredicateuserAgePredicate = new Predicate () { @Override public boolean apply(User input) { return input.getAge() > 25; } }; Predicate userNamePredicate = new Predicate () { @Override public boolean apply(User input) { return "carl".equals(input.getName()); } }; Predicate 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 PredicatetwoDigitsPredicate = 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类的使用方法,至于其它用法。就看大家去挖掘了。
转载地址:https://carlzone.blog.csdn.net/article/details/51713380 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年05月01日 01时12分23秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
爬取小说——爬取标题和正文
2019-04-29
爬取小说——储存为TXT格式
2019-04-29
爬取小说——主体部分
2019-04-29
Python 窗口化操作
2019-04-29
excel的常用函数(二)
2019-04-29
excel的逻辑函数
2019-04-29
excel文本函数
2019-04-29
excel时间日期函数
2019-04-29
excel查找引用函数
2019-04-29
棱镜门事件
2019-04-29
拼多多远程删除用户照片事件
2019-04-29
power BI desktop
2019-04-29
中国信息化发展八大趋势(一)
2019-04-29
中国信息化发展八大趋势(二)
2019-04-29
中国信息化发展八大趋势(三)
2019-04-29
中国信息化发展八大趋势(四)
2019-04-29
电商大战二十年
2019-04-29
神奇的麦考林
2019-04-29