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