我有两个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'行也会更清晰。基本上,缩进使得你的代码现在很难理解。 –
计数会更高,因为内部循环包含不唯一的活动。是否有意义?如果没有,我可以画出来。 –