繁体   English   中英

在流Java 8中使用谓词

[英]Use predicate in stream Java 8

我不明白如何为stream建立谓词。
上课:

public class User {
    @Getter
    @Setter
    private String firstName;

    @Getter
    @Setter
    private String secondName;
}

另外,我有谓词类:

public final class Predicates {

    private Predicates() {
    }

    /**
     * Returns a predicate, Not
     */
    public static <T> Predicate<T> not(Predicate<T> predicate) {
        return predicate.negate();
    }

    /**
     * Returns a predicate, isNull
     */
    public static <T> Predicate<T> isNull(Object o) {
        return (o == null)
                ? ObjectPredicate.IS_NULL.callback()
                : ObjectPredicate.ALWAYS_FALSE.callback();
    }

    //Enum for predicate object
    enum ObjectPredicate implements Predicate<Object> {
        IS_NULL {
            @Override
            public boolean test(Object o) {
                return o == null;
            }
        },
        ALWAYS_FALSE {
            @Override
            public boolean test(Object o) {
                return false;
            }
        };

        <T> Predicate<T> callback() {
            return (Predicate<T>) this;
        }
    }
}

然后我想使用这样的东西:

List<User> users = getSomeUserList();
Booleant check = users.stream().anyMatch(Predicate.isNull(User::getSecondName));

帮助我了解我做错了什么。

您可以使用mapStream<User> mapStream<String> ,然后使用谓词搜索匹配项:

Boolean check = users.stream()
                     .map(User::getSecondName)
                     .anyMatch(Predicates::isNull);

请尝试以下操作:

public static <T, R> Predicate<T> isNull(Function<T, R> mapper) {
        return new Predicate<T> {
            @Override
            boolean test(T o) {
               return ObjectPredicate.IS_NULL.callback().test(mapper.apply(o));
            }
        }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM