JAVA Predicate

发布于:2025-09-14 ⋅ 阅读:(24) ⋅ 点赞:(0)

简单来说,当我明确知道此次判断的逻辑时就可以直接使用if,但是我这次的判断逻辑可能会随着某个参数变化的时候使用Predicate

比如当我想要判断某长段文字中是否包含list<String> 中的元素,并且包含的元素个数大于 list<String>最后一个被转换为string 格式的int数

这时候作为判断元素的list<String>是不定的,但是逻辑是定了的,所以就可以使用Predicate来构建

public static Predicate<String> createTextChecker(List<String> checkList) {
    //省略合法性判断
    // 提取范围
    int threshold;
    try {
        threshold = Integer.parseInt(checkList.get(checkList.size() - 1));
    } catch (NumberFormatException e) {
        throw new IllegalArgumentException("列表最后一个元素必须是整数格式");
    }

    // 返回判断逻辑
    return text -> {
        long count = checkList.stream()
                .limit(checkList.size() - 1) // 排除最后一个阈值元素
                .filter(element -> text.contains(element))
                .count();
        return count > threshold;
    };

然后你可以这样使用它

List<String> list1 = List.of("长歌", "短笛", "2");
Predicate<String> checker1 = createTextChecker(list1);
System.out.println(checker1.test("长歌与风在岭外,短笛声声盼归来。"));

日后作为条件的list1就可以不固定,可以按照逻辑改变

Predicate.negate()

当前的Predicate判断取反

Predicate.or()

这里需要传入一个别的Predicate,当两个Predicate其中一个满足的时候就返回true

Predicate.and()

这里需要传入一个别的Predicate,当两个Predicate都满足的时候就返回true

Predicate.test()

这里需要传入一个参数,就这个例子来说参数类型由上面的方法

Predicate<String> createTextChecker

中的红色位置的类型决定

用于执行判断逻辑

Predicate.equals()

用于对比两个Predicate是否属于同一地址(逻辑一样,但是地址不同也不会判为相同)


网站公告

今日签到

点亮在社区的每一天
去签到