一、方法介绍
/**
* 当所有元素满足条件或stream为空时返回true,否则返回false
*/
boolean allMatch(Predicate<? super T> predicate);
二、场景描述
检查ip地址是否合法(我只是浅显地认为只要满足每一位在0~255即为合法)
三、代码比较
使用allMatch()方法前:
/**
* 检查ip每一位是否越界
* @param ipModel
* @return
*/
private boolean checkIP (@NotNull IPModel ipModel) {
// 这里需要保证ipModel中的两个属性不能为null
if (!checkBounds(Integer.parseInt(ipModel.getLastPartion()), 0, 255)) {
return false;
}
for (String s : ipModel.getSegment().split(".")) {
if (!checkBounds(Integer.parseInt(s), 0, 255)) {
return false;
}
}
return true;
}
使用后:
/**
* 检查ip每一位是否越界
* @param ipModel
* @return
*/
private boolean checkIP (@NotNull IPModel ipModel) {
// 这里需要保证ipModel中的两个属性不能为null
return checkBounds(Integer.parseInt(ipModel.getLastPartion()), 0, 255) &&
Arrays.stream(ipModel.getSegment().split("."))
.allMatch(num -> checkBounds(Integer.parseInt(num), 0, 255));
}
其中
/**
* 检查checkNum是否 ∈ (min, max)
* @param checkNum
* @param min
* @param max
* @return
*/
private boolean checkBounds (int checkNum, int min, int max) {
return checkNum >= min && checkNum <= max;
}
/**
* ip地址模型类
*/
@Data
public class IPModel implements java.io.Serializable, Comparable<IPModel> {
// 网段
private String segment;
// 最后一个数字
private String lastPartion;
...
}
虽然功能上没有区别,但代码简化了很多~
四、相关方法
/**
* 所有元素都不满足条件或stream为空时返回true,否则返回false
*/
boolean noneMatch(Predicate<? super T> predicate);
/**
* 存在一个元素满足条件时返回true,否则返回false
*/
boolean anyMatch(Predicate<? super T> predicate);