Как указано в документации List.indexOf(Object)
, этот метод возвращает -1
, если List
не содержит объект, переданный в качестве аргумента.Попытка получить доступ к List
через индекс -1
всегда вызовет IndexOutOfBoundsException
(или ArrayIndexOutOfBoundsException
, так как вы, кажется, оборачиваете Vector
).
Тем не менее, путьВы в настоящее время реализовали свой метод, всегда приведет к возврату -1
.Обратите внимание на подпись indexOf
;он принимает Object
, а не E
.Это означает, что вы можете передать любой объект в этот метод и ваш код скомпилируется.Теперь взгляните на тип возврата Stream.findFirst()
- он возвращает Optional<T>
.Другими словами, ваш код эквивалентен:
Optional<ClubPerson> optional = personen.stream().filter(p -> p.getId() == currentLid.getId()).findFirst();
int index = personen.indexOf(optional);
...
Поскольку personen
является ObservableList<ClubPerson>
, он не может содержать Optional<ClubPerson>
элементов.
Это не совсем яснопочему вы пытаетесь найти ClubPerson
в списке, а затем запрашиваете индекс этого элемента, только чтобы просто снова получить доступ к списку с указанным индексом, чтобы изменить ClubPerson
, который вы уже нашли.Почему бы просто не изменить ClubPerson
напрямую?Вы даже можете использовать Optional.ifPresent(Consumer)
.
personen.stream().filter(p -> p.getId() == currentLid.getId()).findFirst().ifPresent(p -> {
p.setVoornaam(currentLid.getVoornaam());
p.setAchternaam(currentLid.getAchternaam());
p.setEmail(currentLid.getEmail());
p.setEmailOuders(currentLid.getEmailOuders());
p.setEmail(currentLid.getEmail());
p.setTelefoonNummer(currentLid.getTelefoonNummer());
p.setGeboorteDatum(currentLid.getGeboorteDatum());
p.setBackupTelefoon(currentLid.getBackupTelefoon());
p.setScore(currentLid.getScore());
p.setGeslacht(currentLid.getGeslacht());
p.setRijksregisternummer(currentLid.getRijksregisternummer());
p.setRol(currentLid.getRol());
p.setGraad(currentLid.getGraad());
p.setLocatie(currentLid.getLocatie());
p.setVerwachteDagen(currentLid.getVerwachteDagen());
p.setActiviteiten(currentLid.getActiviteiten());
});
Если элемент, отсутствующий в списке, является ошибкой, вы можете вместо этого использовать что-то вроде Optional.orElseThrow(Supplier)
или Optional.orElseThrow()
(Java 10+).
ClubPerson p = personen.stream().filter(p -> p.getId() == currentLid.getId())
.findFirst()
.orElseThrow(); // throws NoSuchElementException if element not found
// set properties of "p"...