Java 8中的策略模式

这是两个有关如何使用Java 8功能样式以及Cyclops模式匹配和Hamcrest库来实现策略模式设计的示例。

PrintDependingOnInput方法是一种策略,该策略将根据传递的日志在System.println中显示一些消息。

AddPrefix是另一种策略,它将根据邮件内容为邮件添加前缀。

package com.marco.patternmatching; import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.startsWith;
import static org.hamcrest.core.AllOf.allOf;
import java.util.ArrayList;
import java.util.List;
import com.aol.cyclops.matcher.builders.Matching; public class FunctionalStrategy {public static void main(String[] args) {List<String> toTest = new ArrayList<>();toTest.add("INFO everything is fine");toTest.add("WARN something weird happened");toTest.add("ERROR NullPointerException");toTest.add("ERROR IOException");toTest.stream().forEach(FunctionalStrategy::printDependingOnInput);System.out.println("--------------------");List<String> messages = new ArrayList<>();messages.add("everything is fine");messages.add("something weird happened");messages.add("NullPointerException");messages.add("IOException");messages.stream().map(FunctionalStrategy::addPrefix).forEach(System.out::println);}public static void printDependingOnInput(String log) {Matching.when().isMatch(startsWith("INFO")).thenConsume(System.out::println).when().isMatch(startsWith("WARN")).thenConsume(message -> System.out.println("Found one warning : " + message)).when().isMatch(allOf(startsWith("ERROR"), containsString("NullPointerException"))).thenConsume(message -> System.err.println(message)).when().isMatch(allOf(startsWith("ERROR"), containsString("IOException"))).thenConsume(message -> System.err.println(message + " Retrying a couple of times")).match(log);}public static String addPrefix(String log) {return Matching.when().isMatch(allOf(not(containsString("Exception")), not(containsString("weird")))).thenApply(message -> "INFO " + message).when().isMatch(containsString("weird")).thenApply(message -> "WARN " + message).when().isMatch(containsString("Exception")).thenApply(message -> "ERROR " + message).match(log).get();}
}

干净整洁;)

翻译自: https://www.javacodegeeks.com/2015/06/strategy-pattern-in-java-8.html

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

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

相关文章

昨天帮同学的学校写了首校歌

转载于:https://www.cnblogs.com/del/p/3792526.html

php做一个微信退款,PHP实现微信申请退款流程实例代码

前面讲了怎么实现微信支付&#xff0c;详见博文&#xff1a;php实现微信支付(jsapi支付)流程 和ThinkPHP中实现微信支付(jsapi支付)流程。由于业务需求&#xff0c;还需要有微信退款&#xff0c;经过研究和摸索&#xff0c;也终于搞定了。前期准备&#xff1a;当然是搞定了微信…

gwt格式_使用Spring Security保护GWT应用程序的安全

gwt格式在本教程中&#xff0c;我们将看到如何将GWT与Spring的安全模块&#xff08;即Spring Security&#xff09;集成。 我们将看到如何保护GWT入口点&#xff0c;如何检索用户的凭据以及如何记录各种身份验证事件。 此外&#xff0c;我们将实现自定义身份验证提供程序&#…

php制图汉字,PHP用imageTtfText函数在图片上写入汉字

PHP绘图&#xff0c;imageString()这个函数并不支持汉字的绘制。这往往会给入门者当头一棒&#xff0c;不过不要着急&#xff0c;因为还有一个imageTtfText()函数&#xff0c;这个函数能绘制UTF-8编码的字符串&#xff0c;当然可以绘制汉字了。参数&#xff1a;$size 字体大小&…

K-Means算法Demo

简介&#xff1a;本Demo是参照这个网站上的Demo自己用Java实现的。将Java打包为Jar&#xff0c;再将Jar转为exe&#xff0c;源代码及程序Demo下载请点我。 K-Means算法简介 我尽量用通俗易懂但不规范的语言来描述K-Means算法。 K-Means算法是数据挖掘十大算法之一&#xff0c;是…

php 时间周期,php 的生命周期

1、PHP的运行模式&#xff1a;PHP两种运行模式是WEB模式、CLI模式。无论哪种模式&#xff0c;PHP工作原理都是一样的&#xff0c;作为一种SAPI运行。1、当我们在终端敲入php这个命令的时候&#xff0c;它使用的是CLI。它就像一个web服务器一样来支持php完成这个请求&#xff0c…

领域驱动设计之领域模型_在领域驱动的设计,贫乏的领域模型,代码生成,依赖项注入等方面……...

领域驱动设计之领域模型埃里克埃文斯&#xff08;Eric Evans&#xff09;已制定了域驱动设计&#xff08;DDD&#xff09;。 Martin Fowler是DDD的大力支持者和拥护者。 这些都是非凡的名字&#xff0c;几乎可以肯定的是&#xff0c;他们正在支持一些有价值的东西。 我不是在这…

struts2与struts1整合,java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

原因&#xff1a;我往项目的WEB-INF/lib中导入了struts2基本的包&#xff0c;还有struts1的core包&#xff0c;以及struts2-strut1-plugin的包&#xff0c;但是没有导入commons-loggin-1.3.1这个包&#xff0c;如下图 我打开commons-loggin-1.3.1这个包看了一下&#xff0c;果然…

debian 查看php版本,Debian 下轻松实现 PHP 多版本共存

PHP7 的发布废弃了部分特性&#xff0c;一些程序或者插件当前不能很好的运行在 PHP7 上&#xff0c;因此如果服务器上能同时运行多个 PHP 的版本&#xff0c;就可以很好的解决过渡期的兼容性问题。在前面两篇文章中&#xff0c;我们介绍了如何在 Debian Stretch 中安装使用 PHP…

query和prototype库冲突的解决方法

我们在使用 jQuery 的过程中我们会频繁使用 $ 符号&#xff0c;$是JQuery的别名&#xff0c;所有使用$的地方也都可以使用JQuery来替换&#xff0c;例如 如$(#msg)等同于JQuery(#msg)的写法。 在页面中同时引入另一个js类库&#xff0c;并且该类库也是用了 $ 符号时&#xff0c…

php启用openssl,php开启openssl的方法

php开启openssl的方法&#xff0c;大多数情况下openssl是没有开启的&#xff0c;要想启用需要进行下简单的设置windows下开启方法&#xff1a;1&#xff1a; 首先检查php.ini中&#xff1b;extensionphp_openssl.dll是否存在&#xff0c; 如果存在的话去掉前面的注释符‘&#…

apache lucene_全文搜索Apache Lucene简介

apache lucene在本教程中&#xff0c;我想谈谈Apache Lucene 。 Lucene是一个开源项目&#xff0c;提供基于Java的索引和搜索技术。 使用其API&#xff0c;很容易实现全文搜索 。 我将处理Lucene Java版本 &#xff0c;但请记住&#xff0c;还有一个名为Lucene.NET的.NET端口&a…

php 运算验证码类,php 数学运算验证码实现代码

//-------------------------------------// 文件说明&#xff1a;数学运算验证码// 文件作者&#xff1a;Jesse Lee// 最后更新&#xff1a;2008-09-07//-------------------------------------session_start();$sessionvar vdcode; //Session变量名称$width 150; //图像宽度…

经典ICP算法的问题

最近可能要用三维点云实现一个三维场景重建的功能&#xff0c;从经典的ICP算法开始&#xff0c;啃了一些文档&#xff0c;对其原理也是一知半解。 迭代最近点算法综述 大致参考了这份文档之后&#xff0c;照流程用MATLAB实现了一个简单的ICP算法&#xff0c;首先是发现这份文档…

php 405跳转,php – 返回HTTP 405的CORS预检请求

我正在尝试创建一个RESTful Web服务,并且已经停止实现PUT请求.我尝试过但未能在本网站上关注其他答案以及Mozilla的各种文章.该请求是从域wwwtest.dev-box生成的,它将转到test.dev-box(基本上是一个调用后端应用程序的前端应用程序).以下是我从Live HTTP标头中捕获的标头&#…

wowza rtsp_使用wowza和xuggler将RTMP转为RTSP

wowza rtsp注意&#xff1a;这是我们的“ Xuggler开发教程 ”系列的一部分。 大家好&#xff01; 在过去的三个月中&#xff0c;我们一直在进行电话会议项目。 我们认为&#xff0c;使用诸如Flex之类的技术的基于Web的应用程序将是此类要求苛刻的项目的最佳方法。 随着软件的复…

iOS执行时工具-cycript

cycript是大神saurik开发的一个很强大的工具&#xff0c;能够让开发人员在命令行下和应用交互&#xff0c;在执行时查看和改动应用。它确实能够帮助你破解一些应用&#xff0c;但我认为这个工具主要还是用来学习其它应用的设计&#xff08;主要是UI的设计及实现&#xff09;。 …

开启php soap,php soap 开发文档

一&#xff0e; 必备知识1.wsdl(web服务标记语言)WSDL(网络服务描述语言&#xff0c;Web Services Description Language)是一门基于 XML 的语言&#xff0c;用于描述 Web Services 以及如何对它们进行访问。具体参考请访问下面网址2.soapSOAP 是一种简单的基于 XML 的协议&…

知识点2

1. DUMMY是不是检查所有的类型的权限呢&#xff1f;PS:不是&#xff0c;dummy的意思是虚拟的意思&#xff0c;就是说权限检查的时候有这个权限检查字段&#xff0c;但是不对该字段做权限检查。AUTHORITY-CHECK OBJECT Z_BRANDID ACTVT DUMMY ID BRAND FIELD p_br…

java调用jndi出错,无法使用Java JNDI上下文查找来访问对象

我正在运行Tomcat6并希望从我的Servlet访问数据源。但我得到了javax.naming.OperationNotSupportedException: cant generate an absolute name for this namespaceat org.apache.naming.NamingContext.getNameInNamespace(NamingContext.java:772)我的context.xml在HomeContro…