私は多くの場合、Stream
をフィルターに掛ける必要があるか、または指定されたフィールドに所定の値があるかどうかを調べる述部を使用する必要があります。フィールドが指定された値と等しいかどうかをテストする述語を作成する便利な方法はありますか?
言ってやる例えば、私は、このPOJOがあります
public class A {
private Integer field;
public A(final Integer field) {
this.field = field;
}
public Integer getField() {
return field;
}
}
をそして、私はfield
の値に基づいてオブジェクトのStream
をフィルタリングする:
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から、既存の方法を再利用することを好むだろう。
わかりません。しかし、 'someValue'が' null'でないことを知っているなら、単純な 'a - > someValue.equals(a.getField())'で十分です。なぜなら、 'A'がむしろ' NameOfARealLifeClass'だと思えば、それは 'isEqual(A :: getField、someValue)'より悪くはありません... – Holger