2014-03-29 34 views
1

這裏是我的代碼:提供任何更好的邏輯,在while循環檢查空?

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

itrIterator類型。

如果itrnull,然後我面對空指針異常。

我試過使用if condition檢查itr是不是null之前while loop

象下面這樣:

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

是否有其他更好的方式來做到這一點?

+0

如果「ITR」爲空,你不應該這樣環附近的任何地方獲得。 – EJP

回答

0

你的方法似乎更好,但這裏是另一種方式來做到這一點:

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

您使用將拋出空指針異常只有當你刻意分配null以迭代器的代碼。例如。即使exampleList尚未分配任何元素,下面的代碼也不會拋出異常。

List<String> exampleList = new ArrayList<String>(); 

Iterator<String> itr = exampleList.iterator(); 

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

但下面的代碼,你要創建空列表迭代器將拋出一個空指針異常。

List<String> exampleList = null;   
Iterator<String> itr = exampleList.iterator(); 

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

如果您正在初始化您正在創建迭代器的列表,請檢查您的代碼。如果你是做正確的,那麼就沒有必要檢查空指針。

0

ü也可以嘗試反向循環:

if (null != itr && itr.hasNext()) { 
    do { 
    System.out.println(itr.next()); 
    } while (itr.hasNext()); 
} 
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。