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的使用相关推荐

  1. java 8中 predicate chain的使用

    文章目录 简介 基本使用 使用多个Filter 使用复合Predicate 组合Predicate Predicate的集合操作 总结 java 8中 predicate chain的使用 简介 Pr ...

  2. java sessionstate_在Java Web开发中自定义Session

    Session在存储安全性要求较高的会话信息方面是必不可少的,对于分布式Web应用自定义Session支持独立的状态服务器或集群是必须的.本文就来教大家如何在Java Web开发中自定义Session ...

  3. predicate java_java8中predicate的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于java8中predicate的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 传递代码 我们首先看一个例子,假设你有一个 Appl ...

  4. java new collection_使用Java 8新增的Predicate操作Collection集合

    Java 8 起为 Collection 集合新增了一个 removeIf(Predicate filter) 方法,该方法将会批量删除符合 filter 条件的所有元素.该方法需要一个 Predic ...

  5. java引_JAVA中的引用

    JDK1.2之后,Java扩充了引用的概念,将引用分为强引用.软引用.弱引用和虚引用四种. 强引用 类似于"Object a = new Object()"这类的引用,只要垃圾强引 ...

  6. 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 ...

  7. Java 并发编程中的死锁 ( Kotlin 语言讲解)

    什么是死锁? 在操作系统中的并发处理场景中, 进程对资源的持有与请求过程中,会产生死锁. Say, Process A has resource R1 , Process B has resource ...

  8. java从字符串中提取数字

    1.做一下操作时会一般会用到提取数字操纵: a.列表中有翻页,当新添加的数据不是放在第一条或者最后一条时,需要翻页并循环找到对应的那条数据 b.当新添加的数据放在第一条或者最后一条时,则不需要翻页,只 ...

  9. JAVA Web项目中所出现错误及解决方式合集(不断更新中)

    JAVA Web项目中所出现错误及解决方式合集 前言 一.几个或许会用到的软件下载官网 二.Eclipse的[preferences]下没有[sever]选项 三.Tomcat的安装路径找不到 四.T ...

最新文章

  1. jquery实现层级显示 效果图_php运用无限级分类实现评论及回复功能
  2. 如何找到调用当前方法的方法?
  3. SAP销项税多科目配置
  4. 27个机器学习图表翻译_使用机器学习的信息图表信息组织
  5. Android开发笔记(一百二十五)自定义视频播放器
  6. sql查询禁用缓存_如何在SQL Server 2017中启用和禁用身份缓存
  7. 使用HP优盘启动盘格式化工具制作DOS7.1启动盘,U盘.SD.TF卡均可用
  8. matlab两个运动同时进行,多体运动的matlab动画演示
  9. 10月15号 360一面
  10. teredo 未能解析服务器名,Win10系统Xboxlive显示Teredo无法进行限定怎么解决
  11. 译: 进化的系统需要进化的系统工程
  12. 安卓游戏内购破解之滚动的天空
  13. 还有什么服务器有无限连击,无限元宝动作类变态服有哪些
  14. 什么软件可以拍证件照电子版?分享两种拍证件照小妙招
  15. 【运行报错】Centos 6 无法使用 yum
  16. 数字化变电站与智能化变电站的关系
  17. 谁说计算机专业只能去互联网敲代码?国企,公务员,产品经理照样很香|应届生求职指南
  18. QT 语言学习 day07 ui 界面 三种样式的按钮开关的制作!
  19. 超声波脉冲发生器可调电源设计
  20. wps只要拼音不要汉字

热门文章

  1. signature=486e34400687432217e65e837b8e6753,PXE常见错误代码表
  2. 使用ajax将数据显示在指定位置_AJAX学习主题之一
  3. mysql工具的使用_产品操作MySQL入门篇-工具使用
  4. Pycharm使用black作为Python代码格式化外部工具
  5. 科研入门之在web of science
  6. [UE4]集合:TSet容器
  7. Rsync:一个很实用的文件同步命令
  8. dockerfile nginx配置
  9. IOS9.0 导航栏状态栏
  10. cmd使用另一个Oracle的sid,(转发备用)Oracle SID在本机上已经存在,请指定一个不同的SID”的解决办法...