Поиск в Stream Java и обработка исключений java.util.NoSuchElementException: No value present

266
06 февраля 2019, 03:50

Есть поиск в коллекции:

for (Object dataRow : objects) {
    AttributeModel attribute = document.getAttributeModels().stream()
    .filter(atr -> atr.getName().equals(nameField)).findFirst().get();
....
....
}

но если элемента с таким именем нету в коллекции, вы,выбрасывает ошибку :

Exception in thread "main" java.util.NoSuchElementException: No value present

Как правильно обработать эту ошибку в стриме? И как можно сделать, чтобы при отсутствии элемента, выполнялся следующий цикл for() ?

Answer 1

Используйте метод Optional.get() только после проверки Optional.isPresent()

for (Object dataRow : objects) {
    Optional<AttributeModel> opt = document.getAttributeModels()
    .stream()
    .filter(atr -> atr.getName().equals(nameField))
    .findFirst();
    if (opt.isPresent()){
      AttributeModel attribute = opt.get();
    } 
....
....
}
READ ALSO
Чередование двух массивов java

Чередование двух массивов java

Элементы двух массивов нужно поочередно занести в 3 массивК примеру массивы A(n) и B(n) нужно записать как C(a1, b1, a2, b2, a3, b3)

257
Разбиение массива

Разбиение массива

Можем ли из массива вида: 2110

188
Получение объекта JSONObject и NullPointerException

Получение объекта JSONObject и NullPointerException

Пытаюсь создать тренировочный код, позволяющий выгружать с сайта wwwflickr

309
Уведомление которое нельзя убрать

Уведомление которое нельзя убрать

Всем приветДопустим создаю уведомление обычное в сервисе с помощью NotificationCompat

216