Проблема с использованием приложения FindAll с отличным вызовом Collect - PullRequest
0 голосов
/ 07 марта 2019

Отличный вопрос. У меня есть следующий тестовый пример. Мне нужно найти коллекцию и собрать все события в тот же день, что и дата1. Я добавил приложение findAll в конце вызова сбора, так как не могу проверить тот же день в коллекции. Я вижу ошибку «Не удается получить доступ к элементу last () из пустого списка», проверяющий метод .last (), если список пуст, даже если? .Last () используется в проверке условий. Если я удаляю findAll из вызова collect, он работает как обычно, и я не понимаю, почему. Я всегда делаю эту проверку состояния с вызовом collect для создания нового экземпляра, если его нет в списке, но не с приложением findAll на конце. Почему это имеет значение?

Date date1 = new Date();
List<Event> lEvents = test.collect("events").findAll{ d ->
                         DateUtils.isSameDay(d.testdate, d1);
                      }

Event newEvent = lEvents?.last() ?: new Event();

1 Ответ

0 голосов
/ 08 марта 2019

В сообщении об ошибке говорится, что список пуст, а не то, что он нулевой, поэтому ? в ?.last() не имеет значения.Это исключение «пустой список» всегда выдается при попытке извлечь последний элемент пустого списка по понятным причинам.Ваш findAll отфильтровывает все и возвращает пустой список, что вызывает ошибку.

Вы говорите, что всегда проверяете пустой список таким образом, поэтому неясно, как ваш другой код способенЗвоните last() в пустой список, не бросая.У вас точно есть случаи, когда collect() возвращает пустой список?

Чтобы исправить этот конкретный случай, вы можете сделать:

Event newEvent = (lEvents.size() > 0) ? lEvents.last() : new Event()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...