使用Java 8流进行快速失败的验证
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                使用Java 8流进行快速失败的验证
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                 我已經失去了使用類似方法通過失敗快速驗證代碼狀態的次數: 
它可以工作,但是由于有效的檢查,它是一種充滿重復性的蠻力方法。 如果您的代碼樣式對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 8流进行快速失败的验证的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 微博账号注销
- 下一篇: nda是什么意思 nda解释
