java chain_java 8中 predicate chain的使用
java 8中 predicate chain的使用
简介
Predicate是一个FunctionalInterface,代表的方法需要输入一个参数,返回boolean类型。通常用在stream的filter中,表示是否满足过滤条件。
boolean test(T t);
基本使用
我们先看下在stream的filter中怎么使用Predicate:
@Test
public void basicUsage(){
List stringList=Stream.of("a","b","c","d").filter(s -> s.startsWith("a")).collect(Collectors.toList());
log.info("{}",stringList);
}
上面的例子很基础了,这里就不多讲了。
使用多个Filter
如果我们有多个Predicate条件,则可以使用多个filter来进行过滤:
public void multipleFilters(){
List stringList=Stream.of("a","ab","aac","ad").filter(s -> s.startsWith("a"))
.filter(s -> s.length()>1)
.collect(Collectors.toList());
log.info("{}",stringList);
}
上面的例子中,我们又添加了一个filter,在filter又添加了一个Predicate。
使用复合Predicate
Predicate的定义是输入一个参数,返回boolean值,那么如果有多个测试条件,我们可以将其合并成一个test方法:
@Test
public void complexPredicate(){
List stringList=Stream.of("a","ab","aac","ad")
.filter(s -> s.startsWith("a") && s.length()>1)
.collect(Collectors.toList());
log.info("{}",stringList);
}
上面的例子中,我们把s.startsWith("a") && s.length()>1 作为test的实现。
组合Predicate
Predicate虽然是一个interface,但是它有几个默认的方法可以用来实现Predicate之间的组合操作。
比如:Predicate.and(), Predicate.or(), 和 Predicate.negate()。
下面看下他们的例子:
@Test
public void combiningPredicate(){
Predicate predicate1 = s -> s.startsWith("a");
Predicate predicate2 = s -> s.length() > 1;
List stringList1 = Stream.of("a","ab","aac","ad")
.filter(predicate1.and(predicate2))
.collect(Collectors.toList());
log.info("{}",stringList1);
List stringList2 = Stream.of("a","ab","aac","ad")
.filter(predicate1.or(predicate2))
.collect(Collectors.toList());
log.info("{}",stringList2);
List stringList3 = Stream.of("a","ab","aac","ad")
.filter(predicate1.or(predicate2.negate()))
.collect(Collectors.toList());
log.info("{}",stringList3);
}
实际上,我们并不需要显示的assign一个predicate,只要是满足
predicate接口的lambda表达式都可以看做是一个predicate。同样可以调用and,or和negate操作:
List stringList4 = Stream.of("a","ab","aac","ad")
.filter(((Predicate)a -> a.startsWith("a"))
.and(a -> a.length() > 1))
.collect(Collectors.toList());
log.info("{}",stringList4);
Predicate的集合操作
如果我们有一个Predicate集合,我们可以使用reduce方法来对其进行合并运算:
@Test
public void combiningPredicateCollection(){
List> allPredicates = new ArrayList<>();
allPredicates.add(a -> a.startsWith("a"));
allPredicates.add(a -> a.length() > 1);
List stringList = Stream.of("a","ab","aac","ad")
.filter(allPredicates.stream().reduce(x->true, Predicate::and))
.collect(Collectors.toList());
log.info("{}",stringList);
}
上面的例子中,我们调用reduce方法,对集合中的Predicate进行了and操作。
总结
本文介绍了多种Predicate的操作,希望大家在实际工作中灵活应用。
欢迎关注我的公众号:程序那些事,更多精彩等着您!
更多内容请访问 www.flydean.com
java chain_java 8中 predicate chain的使用相关推荐
- java 8中 predicate chain的使用
文章目录 简介 基本使用 使用多个Filter 使用复合Predicate 组合Predicate Predicate的集合操作 总结 java 8中 predicate chain的使用 简介 Pr ...
- java sessionstate_在Java Web开发中自定义Session
Session在存储安全性要求较高的会话信息方面是必不可少的,对于分布式Web应用自定义Session支持独立的状态服务器或集群是必须的.本文就来教大家如何在Java Web开发中自定义Session ...
- predicate java_java8中predicate的用法介绍(代码示例)
本篇文章给大家带来的内容是关于java8中predicate的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 传递代码 我们首先看一个例子,假设你有一个 Appl ...
- java new collection_使用Java 8新增的Predicate操作Collection集合
Java 8 起为 Collection 集合新增了一个 removeIf(Predicate filter) 方法,该方法将会批量删除符合 filter 条件的所有元素.该方法需要一个 Predic ...
- java引_JAVA中的引用
JDK1.2之后,Java扩充了引用的概念,将引用分为强引用.软引用.弱引用和虚引用四种. 强引用 类似于"Object a = new Object()"这类的引用,只要垃圾强引 ...
- Could not target platform: ‘Java SE 11‘ using tool chain: ‘JDK 8 (1.8)‘
本地 JDK 默认环境: JDK 1.8 新项目需要环境:JDK 11.Gradle 报错信息: Execution failed for task ':democloud:registry:comp ...
- Java 并发编程中的死锁 ( Kotlin 语言讲解)
什么是死锁? 在操作系统中的并发处理场景中, 进程对资源的持有与请求过程中,会产生死锁. Say, Process A has resource R1 , Process B has resource ...
- java从字符串中提取数字
1.做一下操作时会一般会用到提取数字操纵: a.列表中有翻页,当新添加的数据不是放在第一条或者最后一条时,需要翻页并循环找到对应的那条数据 b.当新添加的数据放在第一条或者最后一条时,则不需要翻页,只 ...
- JAVA Web项目中所出现错误及解决方式合集(不断更新中)
JAVA Web项目中所出现错误及解决方式合集 前言 一.几个或许会用到的软件下载官网 二.Eclipse的[preferences]下没有[sever]选项 三.Tomcat的安装路径找不到 四.T ...
最新文章
- jquery实现层级显示 效果图_php运用无限级分类实现评论及回复功能
- 如何找到调用当前方法的方法?
- SAP销项税多科目配置
- 27个机器学习图表翻译_使用机器学习的信息图表信息组织
- Android开发笔记(一百二十五)自定义视频播放器
- sql查询禁用缓存_如何在SQL Server 2017中启用和禁用身份缓存
- 使用HP优盘启动盘格式化工具制作DOS7.1启动盘,U盘.SD.TF卡均可用
- matlab两个运动同时进行,多体运动的matlab动画演示
- 10月15号 360一面
- teredo 未能解析服务器名,Win10系统Xboxlive显示Teredo无法进行限定怎么解决
- 译: 进化的系统需要进化的系统工程
- 安卓游戏内购破解之滚动的天空
- 还有什么服务器有无限连击,无限元宝动作类变态服有哪些
- 什么软件可以拍证件照电子版?分享两种拍证件照小妙招
- 【运行报错】Centos 6 无法使用 yum
- 数字化变电站与智能化变电站的关系
- 谁说计算机专业只能去互联网敲代码?国企,公务员,产品经理照样很香|应届生求职指南
- QT 语言学习 day07 ui 界面 三种样式的按钮开关的制作!
- 超声波脉冲发生器可调电源设计
- wps只要拼音不要汉字
热门文章
- signature=486e34400687432217e65e837b8e6753,PXE常见错误代码表
- 使用ajax将数据显示在指定位置_AJAX学习主题之一
- mysql工具的使用_产品操作MySQL入门篇-工具使用
- Pycharm使用black作为Python代码格式化外部工具
- 科研入门之在web of science
- [UE4]集合:TSet容器
- Rsync:一个很实用的文件同步命令
- dockerfile nginx配置
- IOS9.0 导航栏状态栏
- cmd使用另一个Oracle的sid,(转发备用)Oracle SID在本机上已经存在,请指定一个不同的SID”的解决办法...