java 登陆验证失败_使用Java 8流进行快速失败的验证

java 登陆验证失败

我已经失去了看过使用快速失败验证代码状态的代码的次数,方法如下:

public class PersonValidator {public boolean validate(Person person) {boolean valid = person != null;if (valid) valid = person.givenName != null;if (valid) valid = person.familyName != null;if (valid) valid = person.age != null;if (valid) valid = person.gender != null;// ...and many more}
}

它可以工作,但是由于有效的检查,它是一种充满重复性的蛮力方法。 如果您的代码样式对if语句强制使用大括号(为此,则为+1),则您的方法也将长三倍,并且每次向验证器中添加新检查时都会增长。

使用Java 8的新流API,我们可以通过采取if (valid)的保护条件并制作一个通用的验证器来为您处理管道来改善这一点。

import java.util.LinkedList;
import java.util.List;
import java.util.function.Function;public class GenericValidator implements Function {private final List> validators = new LinkedList<>();public GenericValidator(List> validators) {this.validators.addAll(validators);}@Overridepublic Boolean apply(final T toValidate) {// a final array allows us to change the boolean value within a lambdafinal boolean[] guard = {true};return validators.stream()// only send the validator downstream if// previous validations were successful.filter(validator -> guard[0]).map(validator -> validator.apply(toValidate))// update the guard condition.map(result -> {guard[0] = result;return result;})// Logically AND the results of the applied validators.reduce(guard[0], (b1, b2) -> b1 && b2);}
}

使用此方法,我们可以将Person验证器重写为所需验证的规范。

public class PersonValidator extends GenericValidator {private static final List> VALIDATORS = new LinkedList<>();static {VALIDATORS.add(person -> person.givenName != null);VALIDATORS.add(person -> person.familyName != null);VALIDATORS.add(person -> person.age != null);VALIDATORS.add(person -> person.gender != null);// ...and many more}public PersonValidator() {super(VALIDATORS);}
}

PersonValidator和您所有其他的验证器现在可以完全专注于验证。 行为没有改变-验证仍然很快失败。 没有样板,这是一件好事。

这个正在工具箱中进行。

翻译自: https://www.javacodegeeks.com/2015/01/fail-fast-validations-using-java-8-streams.html

java 登陆验证失败

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

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

相关文章

Unity中Shader观察空间推导(在Shader中实现)

文章目录 前言一、观察空间矩阵推导1、求观察空间基向量2、求观察空间的基向量在世界空间中的矩阵 的 逆矩阵2、求平移变换矩阵3、相乘得出 观察空间转化矩阵4、得到顶点的世界空间坐标&#xff0c;然后转化到观察空间5、把观察空间坐标转化为齐次裁剪坐标输出到屏幕 二、最终效…

计算机应用技术一级考试成绩,《计算机应用基础》课程与等级考试成绩的关系...

《闽南师范大学关于计算机应用基础课程成绩的暂行规定》(闽南师大〔2016〕197号)已于2016年7月12日下发&#xff0c;但在执行过程总有包括教务员及学生在内各种人员的种种疑问及错误理解与传达&#xff0c;现在梳理如下&#xff1a;一、开设有《计算机应用基础》课程的学生&…

C 常引用

C 对象常引用在C 中&#xff0c;常用常指针和常引用作函数参数&#xff0c;既能保证数据安全&#xff0c;使数据不能被随意修改&#xff0c;在调用函数时又不必建立实参的拷贝。用常指针和常引用作函数参数&#xff0c;可以提高程序运行效率。在C 中&#xff0c;如果变量名和引…

jasonencode php_PHP的json_encode()函数与JSON对象

一、问题描述这周搬砖的时候&#xff0c;前端通过ajax获取后端的数据后&#xff0c;照例用 对象.属性 的方式取值&#xff0c;然而结果总是总是不能如预期般展示在页面上。先写个 demo 还原下场景&#xff1a;选中一个下拉框列表选项后&#xff0c;会在下拉框下面展示文字。这是…

intext:企业_企业中的微服务:敌是友?

intext&#xff1a;企业宏观问题的微观解决方法&#xff1f; 微服务的炒作无处不在&#xff0c;尽管业界似乎无法就确切的定义达成共识&#xff0c;但我们一再被告知&#xff0c;从单一应用程序转向由小型服务组成的面向服务的体系结构&#xff08;SOA&#xff09;是正确的方法…

mui hello html5 安装,HBuilder开发App Step1——环境搭建,HelloMUI 以及真机调试(示例代码)...

No1. 必须搭建java环境只需要最基础的java环境&#xff0c;也就是cmd下可以运行java和javac即可&#xff0c;具体教程请自行百度&#xff0c;都会有很详细的教程&#xff0c;这里不重点介绍。No2. 下载安装HBuilder下载完成后请将zip包解压缩到自定义的目录(windows)&#xf…

C 析构函数

C 析构函数概述C 析构函数是一个特殊的成员函数&#xff0c;作用与构造函数相反&#xff0c;它的名字是类名的前面加一个&#xff5e;符号&#xff0c;析构函数是与构造函数作用相反的函数&#xff0c;当对象的生命期结束时&#xff0c;会自动执行析构函数。C 执行析构函数的情…

前后端分离的项目部署到tomcat_前后端分离后,tomcat服务器部署和发布

打包服务端&#xff1a;IDEA打开项目&#xff0c;等待项目初始化完成&#xff0c;点击Build- Build Artifacts&#xff0c;进行打包image.png点击之后会出现下面这个小窗口&#xff0c;选择红框中部分&#xff1a;image.png这个过程就是打包了&#xff0c;等待打包完成之后&…

vue 侦听器侦听对象属性_不删除侦听器–使用ListenerHandles

vue 侦听器侦听对象属性听一个可观察的实例并对它的变化做出React很有趣。 做一些必要的事情来打断或结束这种聆听会变得很有趣。 让我们看看问题的根源和解决方法。 总览 这篇文章将首先讨论这种情况&#xff0c;然后再讨论常见的方法和问题所在。 然后&#xff0c;它将提供解…

华硕笔记本桌面没有显示计算机,华硕笔记本的桌面不见了,急求高手解答

满意答案下放工人2013.04.06采纳率&#xff1a;54% 等级&#xff1a;12已帮助&#xff1a;5701人★桌面&#xff0d;点击鼠标右键&#xff0d;点击排列图标&#xff0d;点击显示桌面图标★在桌面上右键点击→“属性”→桌面项→左下有个“自定义桌面”进入设置&#xff0c;把…

Facebook开源 C++11 组件库,真香!

Folly是Facebook open source library的缩写&#xff0c;提供了类似 Boost 和 std 库的功能。包括散列、字符串、向量、内存分配、位处理等&#xff0c;满足大规模高性能的需求。逻辑设计Folly 是一组相对独立的组件&#xff0c;有的简单到几个符号。对内部依赖没有限制&#x…

sentinel接入网关应用_接入容器服务Kubernetes版应用

server:port: 8090# Eurekaeureka:instance:leaseRenewalIntervalInSeconds: 10leaseExpirationDurationInSeconds: 30client:enabled: true #若希望开启Euerka支持&#xff0c;则置为true并将其它服务发现置为false。serviceUrl:defaultZone: http://my-eureka-ack-springclou…

undertow ssl_SSL与WildFly 8和Undertow

undertow ssl我一直在研究WildFly 8的一些安全性主题&#xff0c;偶然发现了一些没有很好记录的配置选项。 其中之一是用于新的Web子系统Undertow的TLS / SSL配置。 有很多关于较旧的Web子系统的文档&#xff0c;并且确实仍然可以使用&#xff0c;但是这里是使用新方法进行配置…

div alert html,基于jQuery的弹出消息插件 DivAlert之旅(一)

想着自己学习Javascript&#xff0c;以及Ajax、jQuery等已经有一段时间了&#xff0c;不过貌似还没有写过一个插件&#xff0c;看到jQuery官网上那么多令人眼前一亮的插件&#xff0c;自己今天也动心说是不是能够写一个类似的插件来瞧瞧&#xff0c;了解了jQuery插件的基本格式…

C++对象的动态建立

C对象的动态建立和释放在C中&#xff0c;如果定义的对象是静态的&#xff0c;在程序运行过程中&#xff0c;对象所占的空间是不能随时释放的。为提高内存空间的利用率&#xff0c;希望在需要用到对象时才建立对象&#xff0c;在不需要用该对象时就撤销它&#xff0c;释放它所占…

java字符连接字符串数组_Java中连接字符串的最佳方法

java字符连接字符串数组最近有人问我这个问题–在Java中使用运算符连接字符串是否对性能不利&#xff1f; 这让我开始思考Java中连接字符串的不同方法&#xff0c;以及它们如何相互对抗。 这些是我要研究的方法&#xff1a; 使用运算符 使用StringBuilder 使用StringBuffer…

微型计算机使用的普通编码是,2017计算机一级考试选择题练习及答案(2)

35、一般计算机硬件系统的主要组成部件有五大部分&#xff0c;下列选项中不属于这五大部分的事( B )A)运算器 B)软件C)输入设备和输出设备 D)控制器36、微型计算机主机的主要组成部分有( A)。A)运算器和控制器B)CPU 和软盘C)CPU 和显示器D)CPU、内存储器和硬盘37、微型计算机硬…

C 构造函数重载

C 用参数初始化表对数据成员初始化在C 中&#xff0c;构造函数的函数可以通过体内赋值语句对数据成员实现初始化&#xff0c;C 还提供另一种初始化数据成员的方法&#xff0c;用参数初始化表来实现对数据成员的初始化。这种方法不在函数体内对数据成员初始化&#xff0c;而是在…

乐播投延迟很高_大屏也要高刷新!华为4K@120智慧屏初体验,屏幕软件都够硬

买电视就是买屏幕&#xff0c;华为智慧屏也不例外。可参数大而全的旗舰产品往往都有着相当高昂的售价&#xff0c;假如你不愿意将就千元级别的画质&#xff0c;希望电视能坚持更长时间&#xff0c;却又没有足以点满所有技能树的预算……华为新出的S系列智慧屏&#xff0c;大概正…

java常见性能优化_十大最常见的Java性能问题

java常见性能优化Java性能是所有Java应用程序开发人员都关心的问题&#xff0c;因为快速使应用程序与使其正常运行同等重要。 史蒂文海恩斯&#xff08;Steven Haines&#xff09;使用他在Java性能问题上的个人经验得出的结论是&#xff0c; 大多数问题都有共同的根本原因 。 因…