java8 策略模式_Java 8中的策略模式

java8 策略模式

这是两个有关如何使用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

java8 策略模式

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

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

相关文章

c语言中ftell函数是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言函数ftell用于获取文件位置指针当前位置相对于文件首的偏移字节数。2、通过ftell函数获取当前文件的大小&#xff0c;然后通过fread函数读取缓冲区。返回值&#xff0c;如果成功&#xff0c;该函数返回位置标识符的当前值&a…

jdk入门_JDK 9 REPL:入门

jdk入门会议是聚会Java名人的好地方。 Devoxx France是与Java语言架构师&#xff0c;前同事和老朋友Brian Goetz&#xff08; briangoetz &#xff09;见面的一个机会。 我们谈论了JDK 9&#xff0c;而他全都热衷于REPL。 他提到&#xff0c;尽管Java SE 9中有很多重要功能 &am…

c语言中局部变量是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、函数内部定义的变量称为局部变量&#xff0c;其作用域仅限于函数内部&#xff0c;离开函数后无效&#xff0c;使用后报错。2、局部变量只能在函数内部使用&#xff0c;离开函数后无效&#xff0c;再次使用会报错。实例#include &…

java接口自动化Excel占位符_基于maven+java+TestNG+httpclient+poi+jsonpath+ExtentReport的接口自动化测试框架...

接口自动化框架项目说明本框架是一套基于mavenjavaTestNGhttpclientpoijsonpathExtentReport而设计的数据驱动接口自动化测试框架&#xff0c;TestNG 作为执行器&#xff0c;poi用于读取存放于excel的接口用例&#xff0c;jsonPath用于校验返回值&#xff0c;以及提取返回值。本…

本地构建和自动化构建_构建自动化面板

本地构建和自动化构建上周二&#xff0c;我作为持续讨论&#xff08;&#xff03;c9d9&#xff09;的一部分&#xff0c;参加了一个关于Build Automation主题的在线讨论会&#xff0c;这是一系列有关敏捷&#xff0c;持续交付和DevOps的社区讨论会。 自动化构建流程面临许多挑战…

C语言为什么要定义short,int,long这么多整数类型?

点击上方蓝字关注我&#xff0c;了解更多咨询整数类型有int、short int、long int三种类型&#xff0c;用于需要不同存储空间的整数使用。整数类型有正整数和负整数之分&#xff0c;在C语言中&#xff0c;规定整型的最高位为符号位&#xff0c;最高位为“0”表示正数&#xff0…

java中逗号怎么加_Java中如何将字符串从右至左每三位加一逗号

/*** * 将字符串从右至左每三位加一逗号* ** param str 需要加逗号的字符串* return 以从右至左每隔3位加一逗号显示*/public static String displayWithComma(String str){str new StringBuffer(str).reverse().toString(); // 先将字符串颠倒顺序String str2 "";…

小度拆卸_拆卸invokedynamic

小度拆卸许多Java开发人员认为JDK的第七版有些令人失望。 从表面上看&#xff0c;仅少数语言和库扩展使它成为了发行版&#xff0c;即Project Coin和NIO2 。 但在幕后&#xff0c;该平台的第七个版本对JVM类型系统进行了最大的扩展&#xff0c;这是其最初发行后引入的。 添加in…

c语言中函数参数类型的探究

点击上方蓝字关注我&#xff0c;了解更多咨询函数中的参数个数可以是0&#xff0c;也可以是一个或多个参数。下面我们带着这三种不同的情况&#xff0c;分别在c语言中进行讨论。1、函数没有参数&#xff0c;表示没有参数列表。int func1(); //声明一个函数&#xff0c;该函数…

java rotate怎么用_jQuery旋转插件jqueryrotate用法详解

本文实例讲述了jQuery旋转插件jqueryrotate用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;CSS3 提供了多种变形效果&#xff0c;比如矩阵变形、位移、缩放、旋转和倾斜等等&#xff0c;让页面更加生动活泼有趣&#xff0c;不再一动不动。然后 IE10 以下版本的浏览…

c语言野指针产生的原因

点击上方蓝字关注我&#xff0c;了解更多咨询1、指针变量未初始化&#xff0c;任何指针变量刚被创建时不会自动成为 NULL 指针&#xff0c;它的缺省值是随机的。所以&#xff0c;指针变量在创建的同时应当被初始化&#xff0c;要么将指针设置为 NULL &#xff0c;要么让它指向合…

java rhino_在Java 8中使用Rhino

java rhinoJava将Nashorn作为JSR 223的新JavaScript实现&#xff08;javax.scripting&#xff09;。 尽管这无疑是个好消息&#xff08;通过直接生成Java代码&#xff0c;Nashorn比Rhino快得多&#xff09;&#xff0c;但它也带来了一些挑战&#xff1a; Nashorn与Rhino并非10…

docx 图片预处理 Java_如何在java中将docx文件头图像复制到另一个docx文件中

尝试(未经测试的):void attachHeader(HeaderPart sourcePart, WordprocessingMLPackage targetPkg) throws Docx4JException {HeaderPart newHeaderPart new HeaderPart();newHeaderPart.setContents(XmlUtils.deepCopy(sourcePart.getContents()));if (sourcePart.getRelatio…

c语言中assert函数的使用注意

点击上方蓝字关注我&#xff0c;了解更多咨询1、使用assert检查函数开始时传入参数的合法性。2、每个assert只检验一个条件&#xff0c;因为在同时检验多个条件时&#xff0c;如果断言失败&#xff0c;就无法直观地判断哪个条件失败。实例int resetBufferSize(int nNewSize) {/…

es 调整gc_实际中进行GC调整

es 调整gc调优垃圾回收与任何其他性能调优活动没有什么不同。 您需要确保您了解当前的情况和所需的结果&#xff0c;而不是因为对应用程序的随机部分进行调整而产生了诱惑。 通常&#xff0c;只需执行以下过程即可&#xff1a; 陈述您的绩效目标 运行测试 测量 与目标比较…

game connect4 java_为我的connect 4数学游戏创建一个积分系统

我试着在每次用户得到正确答案时加一分&#xff0c;如果在我的“连接4”数学游戏中答错了&#xff0c;我就拿走一分。在游戏中&#xff0c;用户把一个计数器放在想要的地方&#xff0c;问题就会弹出&#xff0c;等待答案&#xff0c;以便继续。这段代码中的所有内容都能正常工作…

内核中断处理流程_处理中断

内核中断处理流程我只是在观看Heinz Kabutz的VJUG采访 &#xff0c;这启发了我写一篇有关中断的文章。 顺便说一句&#xff0c;我建议您订阅VJUG YouTube频道 -确实非常有用。 Heinz始终是物有所值的&#xff0c;很难不学习很多东西就很难观看他的演讲。 他提出了如何处理Inte…

c语言中assert函数是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、assert将通过检查表达式expresion的值来决定是否需要终止执行程序。2、如果表达式expresion的值是假的(即0)&#xff0c;它将首先向标准错误流stderr打印错误信息。通过调用abort函数终止程序运行。否则&#xff0c;assert没有效…

java怎么清空一个文件内容_如何从文本文件中删除特定内容? - java

我正在Java的SO的帮助下从事此项目的工作&#xff0c;正在读取一个文件夹&#xff0c;然后将其内容写入文件。然后&#xff0c;我需要浏览该内容&#xff0c;仅保留末尾带有Thumbnail.jpg的图像。编辑&#xff1a;public static final File outFile new File(System.getProper…

sci检索没有馆藏号_转变馆藏

sci检索没有馆藏号您是否曾经想替换过HashSet或HashMap使用的equals和hashCode方法&#xff1f; 或者有一个List的一些元素类型伪装成的List相关类型的&#xff1f; 转换集合使这成为可能&#xff0c;并且本文将展示如何实现。 总览 转换集合是LibFX 0.3.0的一项功能&#xf…