回答:
anyMatch
ラムダ式を使用してみてください。それははるかに良いアプローチです。
boolean idExists = tabPane.getTabs().stream()
.anyMatch(t -> t.getId().equals(idToCheck));
受け入れられた答えは正しいですが、私は(私の意見では)よりエレガントなバージョンを追加します。
boolean idExists = tabPane.getTabs().stream()
.map(Tab::getId)
.anyMatch(idToCheck::equals);
を適用する前にデータ構造をフラット化できるStream#map()の使用をお忘れなくPredicate
。
equals
。当然のことながら、ここでの例は非常に単純ですが、私が意味するところを理解していただければ幸いです。
map
、それは別の処理ステップですか?2つの方法を比較してみます:)
map
)は本質的に遅延であることを覚えておいてください。つまり、getId
メソッドはコレクションの各要素に適用されません。trueanyMatch
が返されるまで、遅延評価されます。
上記の回答では、新しいストリームオブジェクトをmallocする必要があります。
public <T>
boolean containsByLambda(Collection<? extends T> c, Predicate<? super T> p) {
for (final T z : c) {
if (p.test(z)) {
return true;
}
}
return false;
}
public boolean containsTabById(TabPane tabPane, String id) {
return containsByLambda(tabPane.getTabs(), z -> z.getId().equals(id));
}
...
if (containsTabById(tabPane, idToCheck))) {
...
}
noneMatch
代わりに使用しますanyMatch
。