java - 在流 Java 8 中使用谓词

标签 java java-8 java-stream predicate

我不明白如何为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));

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

最佳答案

您可以使用map映射您的 Stream<User>Stream<String>然后使用您的谓词来搜索匹配项:

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

关于java - 在流 Java 8 中使用谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32330068/

相关文章:

java - C# 和 Java 类属性有什么区别?

fxml - 如何在 TreeTableView 中显示行的网格线

java - 无静态方法元工厂(OptaPlanner)

java - 从 map 对象中查找范围内的元素数

java - 使用 7zip 扩展文件

java - 读取数组中包含 null 值的 json 时出现 NullpointerException

Java正则表达式最大长度与一个连字符

java - 如何在foreach java 8中执行算术运算

java - 如何在流中使用 If 语句?

java - 如何使用 stream().sorted() 对带有对象的 ArrayList 进行排序