2016-04-25 68 views
-1

我有兩個ArrayList sourceMessageList和TargetMessageList。我需要比較兩個消息列表數據。如何迭代過大ArrayList <String>?

現在讓我們說List1 - 100 Records。 List2 - 1000記錄 從List1-第1條記錄與list2中的每條記錄進行比較,然後將List1-第2條記錄與list2中的每條記錄進行比較。

但是,list2中的第一個源數據的值爲hasNext()爲true。

private void compareMessageList(ArrayList<String> source_messageList, ArrayList<String> target_messageList) 
      throws Exception { 
     // TODO Auto-generated method stub 
     Iterator<String> sourceMessageIterator = source_messageList.iterator(); 
     Iterator<String> targetMessageIterator = null; 

     while (sourceMessageIterator.hasNext()) { 
      String sourceMessage = (String) sourceMessageIterator.next(); 

      targetMessageIterator = target_messageList.iterator(); 
      while (targetMessageIterator.hasNext()) { 
       String targetMessage = (String) targetMessageIterator.next(); 
       if (getCorpValue(sourceMessage).equalsIgnoreCase(getCorpValue(targetMessage))) { 
        assertXMLEquals(convertSwiftMessageToXML(sourceMessage), convertSwiftMessageToXML(targetMessage)); 
       } 
      } 
     } 

     if (buffer.toString().length() > 0) { 

      writeDifferenceTofile(buffer.toString()); 
      buffer.delete(0, buffer.length()); 
      throw new CatsException("There are some differences in the files."); 
     } 

     System.out.println("Exiting now ..."); 
    } 

上面的代碼執行時間太長。

+1

咦?請澄清。 – OldProgrammer

+0

你需要一些更多的信息。 – rockersdeal

+2

我不太確定你在問什麼,但我的猜測是,無論你的問題是什麼,它都可能通過在外部'while'循環中移動'Iterator targetMessageIterator = ...'行來解決 – SamYonnou

回答

1

爲了加快速度:

HashMap<String, String> lowers = new HashMap<String, String>(); 
for (String source : source_messageList) { 
    lowers.put(getCorpValue(source).toLowerCase(), source); 
} 
for (String target : target_messageList) { 
    final String corpTarget = getCorpValue(target).toLowerCase(); 
    if(lowers.containsKey(corpTarget)) { 
     assertXMLEquals(
      convertSwiftMessageToXML(lowers.get(corpTarget)), 
      convertSwiftMessageToXML(target) 
     ); 
    } 
} 
+0

運作良好。但我認爲lowers.contains(corpTarget)應該由lowers.containsKey(corpTarget)取代。 – rockersdeal

+0

你說得對,我會編輯我的答案 –