All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.moon.core.enums.IntTesters Maven / Gradle / Ivy

package com.moon.core.enums;

import com.moon.core.lang.CharUtil;

import java.util.function.IntPredicate;
import java.util.function.Predicate;

/**
 * @author moonsky
 */
public enum IntTesters implements IntPredicate {
    /**
     * true
     */
    TRUE {
        @Override
        public boolean test(int value) { return true; }
    },
    /**
     * false
     */
    FALSE {
        @Override
        public boolean test(int value) { return false; }
    },
    /**
     * 数字
     */
    DIGIT {
        @Override
        public boolean test(int value) { return CharUtil.isDigit(value); }
    },
    /**
     * 数字
     */
    NUMERIC {
        @Override
        public boolean test(int value) { return CharUtil.isDigit(value); }
    },
    /**
     * 大写或小写字母
     */
    LETTER {
        @Override
        public boolean test(int value) { return CharUtil.isLetter(value); }
    },
    /**
     * 大写字母
     */
    UPPER {
        @Override
        public boolean test(int value) { return CharUtil.isUpperCase(value); }
    },
    /**
     * 小写字母
     */
    LOWER {
        @Override
        public boolean test(int value) { return CharUtil.isLowerCase(value); }
    },
    /**
     * 空白字符
     */
    BLANK {
        @Override
        public boolean test(int value) { return Character.isWhitespace(value); }
    },
    /**
     * 0
     */
    ZERO {
        @Override
        public boolean test(int value) { return value == 0; }
    },
    /**
     * 1
     */
    ONE {
        @Override
        public boolean test(int value) { return value == 1; }
    },
    /**
     * 负整数
     */
    NEGATIVE {
        @Override
        public boolean test(int value) { return value < 0; }
    },
    /**
     * 负整数和〇
     */
    NEGATIVE_OR_ZERO {
        @Override
        public boolean test(int value) { return value <= 0; }
    },
    /**
     * 正整数
     */
    POSITIVE {
        @Override
        public boolean test(int value) { return value > 0; }
    },
    /**
     * 自然数:正整数和〇
     */
    POSITIVE_OR_ZERO {
        @Override
        public boolean test(int value) { return value >= 0; }
    },
    /**
     * 奇数
     */
    ODD {
        @Override
        public boolean test(int value) { return (value & 1) == 1; }
    },
    /**
     * 偶数
     */
    EVEN {
        @Override
        public boolean test(int value) { return (value & 1) == 0; }
    },
    /**
     * 汉字
     */
    CHINESE_WORD {
        @Override
        public boolean test(int value) { return value > 19967 && value < 40880; }
    };

    public final Predicate notPredicate;
    public final Predicate predicate;
    public final IntPredicate not;

    IntTesters() {
        predicate = n -> n != null && test(n.intValue());
        notPredicate = predicate.negate();
        not = value -> !test(value);
    }

    public Predicate asPredicate() { return predicate; }

    /**
     * 返回断言函数,用来检查一个值是否小于 value
     *
     * @param value 期望值
     *
     * @return 断言函数
     */
    public static Predicate lt(double value) { return o -> isNum(o) && ((Number) o).doubleValue() < value; }

    /**
     * 返回断言函数,用来检查一个值是否小于或等于 value
     *
     * @param value 期望值
     *
     * @return 断言函数
     */
    public static Predicate le(double value) { return o -> isNum(o) && ((Number) o).doubleValue() <= value; }

    /**
     * 返回断言函数,用来检查一个值是否大于 value
     *
     * @param value 期望值
     *
     * @return 断言函数
     */
    public static Predicate gt(double value) { return o -> isNum(o) && ((Number) o).doubleValue() > value; }

    /**
     * 返回断言函数,用来检查一个值是否大于或等于 value
     *
     * @param value 期望值
     *
     * @return 断言函数
     */
    public static Predicate ge(double value) { return o -> isNum(o) && ((Number) o).doubleValue() >= value; }

    /**
     * 返回断言函数,用来检查一个值是否等于 value
     *
     * @param value 期望值
     *
     * @return 断言函数
     */
    public static Predicate eq(double value) { return o -> isNum(o) && ((Number) o).doubleValue() == value; }

    /**
     * 返回断言函数,用来检查一个值是否不等于 value
     *
     * @param value 期望值
     *
     * @return 断言函数
     */
    public static Predicate not(double value) { return o -> isNum(o) && ((Number) o).doubleValue() != value; }

    /**
     * 判断对象是否是{@link Number}
     *
     * @param o 待测对象
     *
     * @return true: 是数字;否则返回 false
     */
    private static boolean isNum(Object o) { return o instanceof Number; }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy