是否有一种方便的方法来创建一个谓词来测试一个字段是否等于给定值?
2022-09-02 22:11:47
我经常发现自己需要过滤一个或使用一个谓词来检查给定字段是否具有给定值。Stream
例如,假设我有这个POJO:
public class A {
private Integer field;
public A(final Integer field) {
this.field = field;
}
public Integer getField() {
return field;
}
}
我想根据的值过滤一个对象:Stream
field
final Integer someValue = 42;
Stream.of(new A(42), new A(1729), new A(42), new A(87539319), new A(null))
.filter(a -> Objects.equals(a.getField(), someValue))
...
是否有方便的方法来生成该方法的谓词?我注意到有,但它不符合需求。filter
Predicate.isEqual
我可以很容易地写一个这样的:
public static <T,R> Predicate<T> isEqual(Function<? super T, ? extends R> f, R value) {
return v -> Objects.equals(value, f.apply(v));
}
并将其用作:
Stream.of(new A(42), new A(1729), new A(42), new A(87539319), new A(null))
.filter(isEqual(A::getField, someValue))
...
但是如果可能的话,我宁愿重用JDK中的现有方法。