JAVA 8 stream.allMatch()的使用

一、方法介绍

/**
 * 当所有元素满足条件或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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值