Как проверить, существует ли элемент с помощью лямбда-выражения?
в частности, у меня есть TabPane, и я хотел бы знать, есть ли в нем элемент с определенным идентификатором.
Итак, я хотел бы сделать это с лямбда-выражением в Java:
boolean idExists = false;
String idToCheck = "someId";
for (Tab t : tabPane.getTabs()){
if(t.getId().equals(idToCheck)) {
idExists = true;
}
}
3 ответа:
попробуйте использовать
anyMatch
лямбда-выражения. Это гораздо лучший подход.boolean idExists = tabPane.getTabs().stream() .anyMatch(t -> t.getId().equals(idToCheck));
хотя принятый ответ правильный, я добавлю более элегантную версию (на мой взгляд):
boolean idExists = tabPane.getTabs().stream() .map(Tab::getId) .anyMatch(idToCheck::equals);
Не пренебрегайте помощью поток#map () что позволяет сгладить структуру данных перед применением
Predicate
.
приведенные выше ответы требуют, чтобы вы 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))) { ... }