.filter(elem -> id.equals(ids.get(elem)))
здесь не так, вы уже сделали ids.stream()
, что означает ids
(все элементы идентификаторы ) уже преобразованы в поток и присутствуют для прохождения или отказа через filter()
.
Теперь вы применяете filter()
, который является предикатом и возвращает bool (true или false).
Теперь вам просто нужно сравнить ваш строковый элемент со значением потока, вам не нужно снова входить в List, выполнив get()
.
Ради большего понимания с другим подходом:
List<String> ids = Arrays.asList("Vishwa","Eran","Eugene","gaby","nullpointer");
String id = "gaby";
Predicate<String> pre = (p1)->p1.equals("gaby");
String theID = ids.stream().filter(s->pre.test(id)).findAny().orElse(null);
То, что вышеупомянутые пользователи (Эран и Юджин) сказали, абсолютно правильно, я склонялся к ним, я просто хотел добавить более четкое объяснение того, что я понимаю.