Tôi thường thấy mình cần lọc Stream
hoặc sử dụng biến vị ngữ để kiểm tra xem một trường nhất định có một giá trị đã cho hay không.Có phương pháp tiện lợi nào để tạo ra một Predicate để kiểm tra xem một trường có bằng một giá trị nhất định không?
Nói ví dụ tôi có POJO này:
public class A {
private Integer field;
public A(final Integer field) {
this.field = field;
}
public Integer getField() {
return field;
}
}
Và tôi muốn lọc một Stream
của các đối tượng dựa trên giá trị của 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))
...
Nên có một phương pháp thuận tiện để tạo vị từ cho phương thức filter
? Tôi nhận thấy có Predicate.isEqual
nhưng nó không phù hợp với nhu cầu.
tôi có thể khá dễ dàng viết một như thế này:
public static <T,R> Predicate<T> isEqual(Function<? super T, ? extends R> f, R value) {
return v -> Objects.equals(value, f.apply(v));
}
và sử dụng nó như:
Stream.of(new A(42), new A(1729), new A(42), new A(87539319), new A(null))
.filter(isEqual(A::getField, someValue))
...
nhưng tôi muốn để tái sử dụng một phương pháp hiện tại từ JDK nếu có thể.
Không phải là tôi biết. Nhưng lưu ý rằng nếu bạn biết rằng 'someValue' không phải là' null', thì một 'a -> someValue.equals (a.getField())' đơn giản là đủ. Nó không tệ hơn 'isEqual (A :: getField, someValue)' đối với tôi, đặc biệt nếu tôi cho rằng 'A' đúng hơn là' NameOfARealLifeClass'… – Holger