Вот мой код:
while (itr.hasNext()) {
System.out.println(itr.next());
}
itr
- тип Iterator
.
Если itr
имеет значение null
, тогда я столкнулся с исключительным исключением.
Я попытался использовать if condition
чтобы проверить, не является ли itr
не itr
null
до while loop
.
Как показано ниже:
if (itr != null) {
while (itr.hasNext()) {
System.out.println(itr.next());
}
}
Есть ли другой лучший способ сделать это?
Код, который вы используете, будет генерировать исключение Null Pointer только в том случае, если вы намеренно присваиваете значение null Iterator. Напр. Ниже код не будет генерировать исключение, даже если exampleList не был назначен никаких элементов.
List<String> exampleList = new ArrayList<String>();
Iterator<String> itr = exampleList.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
Но ниже код будет генерировать исключение нулевого указателя, поскольку вы пытаетесь создать итератор в списке Null.
List<String> exampleList = null;
Iterator<String> itr = exampleList.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
Проверьте свой код, если вы инициализируете список, в котором вы создаете итератор. Если вы делаете это правильно, тогда нет необходимости проверять указатель Null.
Просто чтобы добавить еще один ответ в микс, для разнообразия:
while(Optional.ofNullable(itr).orElse(EmptyIterator.INSTANCE).hasNext()) {
System.out.println(itr.next());
}
Или, может быть:
Optional.ofNullable(itr).map(item -> {
while(item.hasNext()) {
System.out.println(item.next());
}
});
Теперь убедитесь, что.map будет обрабатывать возврат println void.
u также может попробовать обратный цикл:
if (null != itr && itr.hasNext()) {
do {
System.out.println(itr.next());
} while (itr.hasNext());
}
Ваш подход кажется лучше, но вот еще один способ сделать это:
while (itr != null && itr.hasNext()) {
System.out.println(itr.next());
}