Мне часто приходится фильтровать 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, если это возможно.