我有兩個foreach
循環。其中之一包含唯一電子郵件列表(外部)。我希望將外部循環作爲外部循環,並且每次在外部循環的元素與內部循環之間匹配時增加1。如何優化嵌套循環?
我現在代碼:
outer: for (String email : emailsOfContactsWhoFitDynConFilter) {
for (Contact contact : emailClicks.items) {
String[] contactLink = (contact.link).split("\\?", -1);
String queryStringActivity = getQueryStringByName("elqTrackId", contactLink[1]);
if (email.equals(contact.EmailAddress) && contactLink[0].equals(linkInDynamicContentSplit[0])) {
if (queryStringActivity !=null && queryStringDynConLink!=null && queryStringActivity.equals(queryStringDynConLink)){
count++;
break outer;
} else if (queryStringActivity == null || queryStringDynConLink == null) {
System.out.println(" - Missing elqTrackId. But base the same, count++");
count++;
break outer;
}
}
}
}
它的工作原理,但問題是這兩條線:
String[] contactLink = (contact.link).split("\\?", -1);
String queryStringActivity = getQueryStringByName("elqTrackId", contactLink[1]);
被執行過很多次消耗了大量的時間。
我可以扭轉的循環,所以它看起來像這樣:
outer: for (Contact contact : emailClicks.items) {
String[] contactLink = (contact.link).split("\\?", -1);
String queryStringActivity = getQueryStringByName("elqTrackId", contactLink[1]);
for (String email : emailsOfContactsWhoFitDynConFilter) {
if (email.equals(contact.EmailAddress) && contactLink[0].equals(linkInDynamicContentSplit[0])) {
if (queryStringActivity !=null && queryStringDynConLink!=null && queryStringActivity.equals(queryStringDynConLink)){
count++;
break outer;
} else if (queryStringActivity == null || queryStringDynConLink == null) {
System.out.println(" - Missing elqTrackId. But base the same, count++");
count++;
break outer;
}
}
}
}
那會快很多,但我的count++
會發生更多的時間比我想,這不會是+1
每一個獨立的電子郵件。
我投票關閉這一問題作爲題外話,因爲這個問題將是一個更適合於:http://codereview.stackexchange.com/ –
爲什麼'計數++'執行不同的次數?在交叉連接中,您仍然只在每對中檢查一次。順便說一句,如果將標籤放在循環的上方,而不是同一行代碼,則代碼將更易於閱讀。如果你將其縮小,你的'else if'行也會更清晰。基本上,縮進使得你的代碼現在很難理解。 –
計數會更高,因爲內部循環包含不唯一的活動。是否有意義?如果沒有,我可以畫出來。 –