有什么更好的逻辑可以在while循环中检查null吗?

时间:2014-03-29 06:42:24

标签: java loops

这是我的代码:

while (itr.hasNext()) {
    System.out.println(itr.next());
}

itr的类型为Iterator

如果itrnull,那么我面临空指针异常。

我已尝试使用if condition检查itr之前null是否不是while loop

如下所示:

if (itr != null) {
    while (itr.hasNext()) {
        System.out.println(itr.next());
    }
}

还有其他更好的方法吗?

4 个答案:

答案 0 :(得分:1)

只有在故意为Iterator指定null时,您使用的代码才会抛出Null Pointer异常。例如。即使没有为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指针。

答案 1 :(得分:0)

你的方法似乎更好,但这是另一种方法:

while (itr != null && itr.hasNext()) {
    System.out.println(itr.next());
}

答案 2 :(得分:0)

你也可以尝试反循环:

if (null != itr && itr.hasNext()) {
  do {
    System.out.println(itr.next());
  } while (itr.hasNext());
}

答案 3 :(得分:0)

只是为了混合而提出另一个答案:

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 return。