java延时执行_Java谓词的延迟执行

java延时执行

在先前的文章“ 用Java的供应商延迟执行 ”和“ Java的消费者延迟执行 “,我看着很容易地通过推迟标准Java API接受,分别在Java执行供应商 S和消费者秒。 在本文中,我将对标准JDK提供的API如何通过标准功能接口Predicate允许延迟执行进行类似的研究。 Predicate 在其Javadoc中进行了描述 ,“代表一个参数的谓词(布尔值函数)。” 换句话说, Predicate就像JDK提供的函数一样 ,但是其返回值限制为truefalse

标准Java API中Predicate的最常见应用可能是在过滤器的上下文中。 这篇Predicate中的几个示例将演示Predicate结合过滤方法对Optional实例和Stream实例的使用。

Optional.filter(谓词)

可选类的filter(Predicate)方法的行为通过其Javadoc文档进行了描述,“如果存在值,并且该值与给定谓词匹配,则返回描述该值的Optional ,否则返回一个空的Optional 。 ” 换句话说, Optional.filter(Predicate)返回一个Optional ,如果原始Optional为空,或者应用于原始和当前OptionalPredicate解析为false ,则该Optional将为空。 否则,如果原始的Optional确实具有“ present”值,并且应用于该值的Predicate返回true ,则返回的Optional也将具有相同的“ present”值。 下一个代码清单对此进行了说明(完整的源代码在GitHub上可用 )。

展示了Optional.filter(Predicate)

/*** Demonstrate use of {@code Optional.filter(Predicate)} on an* {@code Optional<Boolean>}.*/
public static void demonstrateOptionalFilterOnBoolean()
{out.print("\nfalse: ");getOptionalBoolean(false).filter(b -> b).ifPresent(out::print);out.print("\ntrue:  ");getOptionalBoolean(true).filter(b -> b).ifPresent(out::print);out.print("\nnull:  ");getOptionalBoolean(null).filter(b -> b).ifPresent(out::print);
}/*** Demonstrate use of {@code Optional.filter(Predicate)} on an* {@code Optional<Float>}.*/
public static void demonstrateOptionalFilterOnFloat()
{out.print("\n3.14: ");getOptionalFloat(3.14f).filter(f -> f > 0.0).ifPresent(out::print);out.print("\n-2.5: ");getOptionalFloat(-2.5f).filter(f -> f > 0.0).ifPresent(out::print);out.print("\nnull: ");getOptionalFloat(null).filter(f -> f > 0.0).ifPresent(out::print);
}

上面的代码清单中的两种方法演示了Optional.filter(Predicate)在基于数值比较的lambda表达式上产生直接boolean结果以及在lambda表达式上产生boolean结果的用法。 在一种情况下, Predicateboolean ,在另一种情况下, Predicate是数值比较。

Stream.filter(谓词)

Stream接口的方法filter(Predicate) 与同名的Optional类的方法相似 。 下面的代码清单演示了Stream.filter(Predicate)

展示了Stream.filter(Predicate)

/*** Demonstrates use of {@code Stream.filter(Predicate}}.*/
public static void demonstrateStreamFilter()
{final int maximum = 100;out.println("\nThe probable prime numbers between 1 and " + maximum + " are:");final Stream<BigInteger> bigIntegers = getConsecutiveBigIntegers(maximum);bigIntegers.filter(bi -> bi.isProbablePrime(100)).forEach(pp -> out.println(" " + pp));
}

上面的代码列表不是用于展示在Java识别素数的最佳方法。 相反,它意在表明如何filter(Predicate)可以在调用Stream来缩小该要素Stream ,只有那些符合Predicate

对于我的下图Stream.filter(Predicate) ,我使用Pattern类的方便的方法asPredicate()供给的实例Predicate要被提供给使用这两个例子Stream.filter(Predicate)

演示了Pattern.asPredicate()的Stream.filter(Predicate)

/*** Demonstrates use of {@code Pattern.asPredicate()} to provide* a {@code Predicate} that can be used with {@code Stream.filter()}.*/
public static void demonstratePatternAsPredicateInFilter()
{final long count= getPotentialTelephoneNumbers().stream().filter(PATTERN.asPredicate()).peek(out::println).count();out.println(count + " valid telephone numbers.");
}

Collection.removeIf(谓词)

Collection接口指定(并作为默认方法实现 )有用的方法removeIf(Predicate) 。 还有Collection多个实现,它们实现了它们自己的removeIf(Predicate)的覆盖版本,包括ArrayDeque.removeIf(Predicate) , ArrayList.removeIf(Predicate)和Vector.removeIf(Predicate) 。

下一个代码清单演示了运行中的Collection.removeIf(Predicate)两个示例。 第一个示例使用Predicate.negate()方法取反期望的正则表达式模式,以便从集合中删除的元素是与正则表达式不匹配的元素。 第二个示例执行类似的功能,但是利用了JDK 11引入的“非”方法来执行此否定操作。

展示了带有否定的Pattern.asPredicate()的Collection.removeIf(Predicate)

/*** Demonstrates use of {@code Collection.removeIf(Predicate)}* in conjunction with {@code Predicate.negate()}.*/
public static void demonstrateCollectionRemoveIf()
{final Set<String> telephoneNumbers = new HashSet<>(getPotentialTelephoneNumbers());telephoneNumbers.removeIf(PATTERN.asPredicate().negate());out.println(telephoneNumbers);
}/*** Demonstrates use of {@code Collection.removeIf(Predicate)}* in conjunction with JDK 11-introduced {@code Predicate.not()}.*/
public static void demonstrateCollectionRemoveIfWithJdk11Not()
{final Set<String> telephoneNumbers = new HashSet<>(getPotentialTelephoneNumbers());telephoneNumbers.removeIf(not(PATTERN.asPredicate()));out.println(telephoneNumbers);
}

Stream.allMatch(谓词)

如果流中的每个元素都与提供的Predicate匹配,则Stream接口的方法allMatch(Predicate)返回true 。 如果甚至单个元素都不匹配Predicate ,则该方法返回false

展示了Stream.allMatch(Predicate)

/*** Demonstrate use of {@code Stream.allMatch(Predicate)}.*/
public static void demonstrateStreamAllMatch()
{final Set<String> names = getNames();final boolean allNamesSixDigits = names.stream().allMatch(name -> name.length() == 6);out.println("Are all names " + names + " six digits? " + allNamesSixDigits);
}

Stream.anyMatch(谓词)

所述Stream.anyMatch(谓词)方法返回true ,如果它的元素中的至少一个相匹配的Predicate并返回false ,如果没有它的元素的匹配Predicate

展示了Stream.anyMatch(Predicate)

/*** Demonstrate use of {@code Stream.anyMatch(Predicate)}.*/
public static void demonstrateStreamAnyMatch()
{final Set<String> names = getNames();final boolean anyNamesSixDigits = names.stream().anyMatch(name -> name.length() == 6);out.println("Are any names " + names + " six digits? " + anyNamesSixDigits);
}

Stream.noneMatch(谓词)

所述Stream.noneMatch(谓词)方法返回true时在流没有元素匹配Predicate并返回false如果流中的至少一种元素确实匹配的Predicate

展示了Stream.noneMatch(Predicate)

/*** Demonstrate use of {@code Stream.noneMatch(Predicate)}.*/
public static void demonstrateStreamNoneMatch()
{final Set<String> names = getNames();final boolean noNamesSixDigits = names.stream().noneMatch(name -> name.length() == 6);out.println("Are no names " + names + " six digits? " + noNamesSixDigits);final boolean noNamesFourDigits = names.stream().noneMatch(name -> name.length() == 4);out.println("Are no names " + names + " four digits? " + noNamesFourDigits);
}

Collectors.partitioningBy(谓词)

尽管还有更多使用 Predicate JDK API ,但本文将通过讨论和使用Collectors.partitioningBy(Predicate)的示例进行总结。 这种有趣的方法将调用流的所有元素分为两组,一组与键Boolean.TRUE相关联(与Predicate匹配的元素),与键Boolean.FALSE相关联的一组(不与键Boolean.FALSE关联的组)匹配Predicate )。 下一个代码清单利用这一点将整数分为偶数和奇数。

展示了Collectors.partitioningBy(Predicate)

/*** Demonstrate use of {@code Collectors.partitioningBy(Predicate)}.*/
public static void demonstrateCollectorsPartitioningBy()
{final Map<Boolean, List<Integer>> evensAndOdds= getConsecutiveIntegers(100).collect(Collectors.partitioningBy(integer -> integer % 2 == 0));out.println("Evens: " + evensAndOdds.get(Boolean.TRUE));out.println("Odds:  " + evensAndOdds.get(Boolean.FALSE));
}

我在上面的代码示例中使用了几种“帮助程序”方法,这些在本文中未显示。 这些“帮助程序”方法以及本文中显示的所有示例都可以在GitHub上找到 。

Java的标准功能接口Predicate是内置Java功能接口Function的一个特殊版本,可以说应该得到自己的专业化,因为true / false返回状态对于表示某些功能适用或不适用的条件非常有用。 这篇文章演示了JDK中的几个实例,其中Predicate用于确定哪些流元素适用,是否使用Optional ,并将流元素分为满足谓词的元素和不满足谓词的元素。 在此过程中,还演示了便捷方法,例如Pattern.asPredicate()和Predicate.not() 。

翻译自: https://www.javacodegeeks.com/2018/07/deferred-execution-javas-predicate.html

java延时执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac 如何彻底删除/卸载程序

卸载某些应用程序后会留下一些预置文件和缓存等&#xff0c;一般这些文件没有潜在坏处&#xff0c;不过有些文件的存在也会导致无法正常安装新版本&#xff0c;你可以删除它们来彻底跟该应用程序说拜拜。这些文件通常位于以下路径&#xff1a; ~/Library/Application Support/…

air java,Java Bean

1.Java Bean 简介Java Bean (也称为Bean) 是一个遵循特定写法的Java类&#xff0c;只不过这个类需要遵循一些编码的约定&#xff0c;通常具有如下特点&#xff1a;1).它是一个公开的(public)类&#xff1b;2).它有一个默认的构造方法&#xff0c;也就是不带参数的构造方法(在实…

如何理解Java的类变量、成员变量、常量、类属性、实例属性、字段(field)、成员方法、类方法

文章目录变量相关概念变量/常量类变量/静态变量成员变量/实例变量类属性/实例属性/对象属性什么是 field成员变量和类变量的区别两个变量的生命周期不同访问方式不同数据存储位置不同方法相关概念示例代码判断题变量相关概念 变量/常量 所谓变量就是指可以改变的数据量&#…

无处不再的广告_我的机器人现在无处可去。 无家可归。 无服务器。

无处不再的广告我通常会关注各种网站-最新出版物&#xff0c;热门新报价&#xff0c;限时游戏和竞赛等。 其中大多数不提供“干净”的通知系统&#xff0c;例如RSS feed。 因此&#xff0c;我经常不得不刮擦他们HTML才能达到我的需求。 这意味着我经常需要运行一些自定义的字…

java service实例,javaweb后端实例 service

service的作用1.将前端需要的业务代码封装成接口2.将do数据封装为vo3.水平有限只知道这些下面展示的代码为将do封装为vopublic class StationService { private StationDao stationDao new StationDao(); public List listSLByYear(int year) { //创建vo链表 List list new L…

前端 JS 如何在一个页面中局部加载其它页面的数据

一个页面很大&#xff0c;可以分成多个部分&#xff0c;先把小部分的 jsp 写好之后&#xff0c;再在主页面中通过 Struts 2 标签或 ajax 请求来引入其它的 jsp 显示信息。 通过 jQuery 函数来加载其它页面的数据 <script> $(function () {$("#new").load(&qu…

switch字符串jdk_应用新的JDK 11字符串方法

switch字符串jdk在“ 使用JDK 11的Java字符串上的新方法 ”和“ String&#xff03;repeat即将加入Java&#xff1f; ”&#xff0c;我讨论了JDK 11引入Java String的六种新方法。 可用的早期访问JDK 11构建已经包含了这些新方法&#xff0c;在这篇文章中&#xff0c;我将使用…

aws lambda使用_使用AWS Lambda的CloudWatch事件通知

aws lambda使用CloudWatchEvents的主要用例是跟踪整个AWS基础架构中的更改。 当前&#xff0c;它支持跨Auto Scaling组&#xff0c;EC2&#xff0c;EBS和其他各种事件发出的事件。 为了对这些事件进行有意义的处理&#xff0c;我们需要一种消耗它们的方法。 AWS使用术语“ targ…

Struts2中的OGNL表达式和ValueStack

文章目录OGNL 是干什么用的示例代码一示例代码二使用OGNL获取JavaBean对象的属性值获取集合属性中元素的属性的值XWork 中对 OGNL 的扩展示例代码Struts2 对 OGNL 的封装OGNL 可以用在哪些地方OGNL 的结构示意图XWork 对 OGNL 改造后的结构示意图Struts 2 对 OGNL 改造后的结构…

matlab画图五角星标记,Matlab---画图线型、符号及颜色

Matlab 画图线形、颜色、数据点形状的选择1&#xff0c;线形- Solid line (default)-- Dashed line: Dotted line-. Dash-dot line2&#xff0c;颜色r Redg Greenb Bluec Cyanm Magentay Yellowk Blackw White3&#xff0c;数据点的形状 Plus signo Circle* Asterisk. Pointx C…

php 淘宝客接口开发,如何使用PHP的curl函数调用维易淘客接口

《如何使用PHP的curl函数调用维易淘客接口》要点&#xff1a;使用curl调用维易淘客接口高佣转链维易淘客接口是用GET方式调用的&#xff0c;直接用GET调用即可&#xff0c;以下用PHP为例&#xff1a;使用curl调用维易淘客接口高佣转链&#xff1a;$apihttp://api.vephp.com/hca…

querydsl 转字符串_QueryDSL中包含通配符的字符串的精确匹配

querydsl 转字符串在我们最近的一个项目中&#xff0c;我们的客户要求一个搜索字段&#xff0c;该字段可以搜索名字&#xff0c;姓氏和电子邮件地址&#xff0c;唯一的通配符是星号“ *”&#xff0c;表示部分匹配。 听起来很简单&#xff0c;但这使我们陷入了混乱。 在我们的项…

Java中,我自己定义的某个类,去实现某个接口,是否必须实现该接口的全部抽象方法呢?

不一定&#xff0c;关键要看子类是否是抽象类。 如果子类是非抽象类&#xff0c;则必须实现接口中的所有方法&#xff1b;如果子类是抽象类&#xff0c;则可以不实现接口中的所有方法&#xff0c;因为抽象类中允许有抽象方法的存在&#xff01; 一、抽象类定义 抽象类往往用…

堆栈溢出 java_堆栈溢出回答了我们所不知道的Java首要问题

堆栈溢出 java您不应该错过的堆栈溢出问题集合&#xff1a; 这不是秘密&#xff1b; 我们都使用堆栈溢出。 它拥有生命&#xff0c;宇宙和几乎所有与代码相关的答案。 该平台为开发人员&#xff0c;工程师和其他人员提供了一个找到他们所面临问题的答案的地方&#xff0c;或者…

Java 的面向接口编程

假设有这样的代码&#xff1a; F f new G(); f.do(); f.cook(); ...F 是一个接口&#xff0c;G 是 F 的一个实现类&#xff08;也叫具体类/派生类&#xff09;。 如果现在需要另外一个实现类 H 采用其他技术实现接口 F 的所有抽象方法&#xff0c;那么只要修改一条代码&…

mysql 表数据diff,mysqldiff使用笔记

背景手上有个项目&#xff0c;有三个环境:本地开发,测试环境,线上环境&#xff0c;历史原因怀疑数据库表字段可能出现不匹配&#xff0c;所以寻找合适的工具比较数据库表结构。找到了mysqldiff。准备工具正好手上有台windows机器&#xff0c;使用windows版本测试安装mysqldiff是…

java超出gc开销_通过这5个简单的技巧减少GC开销

java超出gc开销编写代码的五种简单方法&#xff0c;可以提高内存效率&#xff0c;而无需花费更多时间或降低代码可读性 垃圾回收会为您的应用程序增加多少开销&#xff1f; 您可能不知道确切的数字&#xff0c;但您确实知道总有改进的余地。 尽管自动GC是最有效的过程&#x…

JSTL(Java 标准标签库)

文章目录JSTL 简介JSTL 可以使用在哪里JSTL 使用步骤使用标签if 语句选择语句迭代遍历语句URL重写设置属性值删除属性值异常捕获导入其它 JSP 页面重定向输出指定的值JSTL 简介 Java Standard Taglib(Java 标准标签库)。 JSTL 是一种代替 JSP 中的 Java 代码的技术。sun 公司…

php hash代码下载,PHP中的哈希表 hash_insert

[php]代码库int hash_insert(HashTable *ht, char *key, void *value){// check if we need to resize the hashtableresize_hash_table_if_needed(ht); // 哈希表不固定大小&#xff0c;当插入的内容快占满哈表的存储空间// 将对哈希表进行扩容&#xff0c; 以便容纳所有的元素…

跟踪React流–将Spring Cloud Sleuth与Boot 2结合使用

Spring Cloud Sleuth在OpenZipkin Brave的基础上增加了对Spring工具的支持&#xff0c; 从而使Spring Boot应用程序的分布式跟踪变得异常简单。 这是关于使用此出色的库添加对分布式跟踪的支持所需内容的简要介绍。 考虑两个应用程序–一个使用上游服务应用程序的客户端应用程…