Spesso mi trovo nella necessità di filtrare uno Stream
o di utilizzare un predicato che controlla se un determinato campo ha un determinato valore.Esiste un metodo comodo per creare un predicato che verifica se un campo è uguale a un determinato valore?
Dire per esempio ho questa POJO:
public class A {
private Integer field;
public A(final Integer field) {
this.field = field;
}
public Integer getField() {
return field;
}
}
E voglio filtrare un Stream
di oggetti in base al valore del 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))
...
Ci sarebbe un metodo comodo per generare il predicato per il metodo filter
? Ho notato che c'è lo Predicate.isEqual
ma non si adatta alle necessità.
ho potuto abbastanza facilmente scrivere uno come questo:
public static <T,R> Predicate<T> isEqual(Function<? super T, ? extends R> f, R value) {
return v -> Objects.equals(value, f.apply(v));
}
e usarlo come:
Stream.of(new A(42), new A(1729), new A(42), new A(87539319), new A(null))
.filter(isEqual(A::getField, someValue))
...
ma preferirei di riutilizzare un metodo esistente dal JDK, se possibile.
Non che io sappia. Nota che se sai che 'someValue' non è' null', è sufficiente un semplice 'a -> someValue.equals (a.getField())'. Non sembra peggio di 'isEqual (A :: getField, someValue)' per me, specialmente se considero che 'A' è piuttosto un' NameOfARealLifeClass' ... – Holger