我经常发现自己需要过滤Stream或使用谓词来检查给定字段是否具有给定值.
比方说我有这个POJO:
public class A {
private Integer field;
public A(final Integer field) {
this.field = field;
}
public Integer getField() {
return field;
}
}
Run Code Online (Sandbox Code Playgroud)
我想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))
...
Run Code Online (Sandbox Code Playgroud)
是否有方便的方法来生成方法的谓词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));
}
Run Code Online (Sandbox Code Playgroud)
并将其用作: …