[英]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));
帮助我了解我做错了什么。
您可以使用map
将Stream<User>
map
到Stream<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.