2016-04-30 21 views
0

我的代碼進行迭代是,的Java迭代器停止unexpectadely

Iterator<BrokerDeals> it = listBrokerDeals.iterator(); 
ArrayList<BrokerDeals> listBrokerDeals_new = new ArrayList<BrokerDeals>(); 
        while (it.hasNext()) 
        { 
         BrokerDeals deals = it.next(); 
         Log.i("TRACE==","deals.ok_id"+deals.getOkId()); 
         if(!(deals.getOkId().equalsIgnoreCase(null))) 
         { 
          Log.i("TRACE==","deals.ok_id inside cond"); 
          listBrokerDeals_new.add(deals); 
         } 

        } 

        Log.i("TRACE==","list broker deals" +listBrokerDeals_new); 

我的日誌是

04-30 08:20:28.021 28449-28449/com.o.n I/TRACE==: deals.ok_id6321r9hrr960780 
04-30 08:20:28.021 28449-28449/com.o.n I/TRACE==: deals.ok_id inside cond 
04-30 08:20:28.021 28449-28449/com.o.n I/TRACE==: deals.ok_idx9crv9119111a 
04-30 08:20:28.021 28449-28449/com.o.n I/TRACE==: deals.ok_id inside cond 
04-30 08:20:28.021 28449-28449/com.o.n I/TRACE==: deals.ok_iden27yx79ph6082241a 
04-30 08:20:28.021 28449-28449/com.o.n I/TRACE==: deals.ok_id inside cond 
04-30 08:20:28.021 28449-28449/com.o.n I/TRACE==: deals.ok_idkhvu42e929520 
04-30 08:20:28.021 28449-28449/com.o.n I/TRACE==: deals.ok_id inside cond 
04-30 08:20:28.021 28449-28449/com.o.n I/TRACE==: deals.ok_iduly4n9b9ne2071111a 
04-30 08:20:28.021 28449-28449/com.o.n I/TRACE==: deals.ok_id inside cond 
04-30 08:20:28.021 28449-28449/com.o.n I/TRACE==: deals.ok_idkcis9719n464179 
04-30 08:20:28.021 28449-28449/com.o.n I/TRACE==: deals.ok_id inside cond 
04-30 08:20:28.021 28449-28449/com.o.n I/TRACE==: deals.ok_idnull 
04-30 08:20:28.871 28449-29253/com.o.n I/qtaguid: Untagging socket 137 

正如你可以在日誌中看到ITERATOR停止時deals.ok_id()給出空和Log.i(「TRACE ==」,「list broker deals」+ listBrokerDeals_new);這永遠不會被打印。

任何想法爲什麼程序停止沒有錯誤?

回答

1

用於檢查getOkId()是否爲空的代碼是錯誤的。

if(!(deals.getOkId().equalsIgnoreCase(null))) 

它應該是:

if(!(deals.getOkId() == null)) 

因爲該方法需要一個非空字符串。正如在其JavaDoc中指出:

該方法返回true,如果參數不是null和琴絃 是相等的,忽略大小寫;否則爲假。