温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - Efficient alternative to nested For Loop
filter for-loop java nested-loops profanity

java - 嵌套For循环的高效替代方案

发布于 2020-03-27 10:44:50

我正在做亵渎过滤器。我有2个嵌套的for循环,如下所示。有没有更好的方法来避免嵌套的for循环并提高时间复杂度。

boolean isProfane = false;
final String phraseInLowerCase = phrase.toLowerCase();
for (int start = 0; start < phraseInLowerCase.length(); start++) {
    if (isProfane) {
        break;
    }
    for (int offset = 1; offset < (phraseInLowerCase.length() - start + 1 ); offset++) {
        String subGeneratedCode = phraseInLowerCase.substring(start, start + offset);
        //BlacklistPhraseSet is a HashSet which contains all profane words
        if (blacklistPhraseSet.contains(subGeneratedCode)) {
            isProfane=true;
            break;
        }
    }
}

查看更多

查看更多

提问者
GoutiB
被浏览
392
gokareless 2019-07-03 21:56

考虑@Mad Physicist实现的Java 8版本:

        boolean isProfane = Stream.of(phrase.split("\\s+"))
            .map(String::toLowerCase)
            .anyMatch(w -> blacklistPhraseSet.contains(w));

要么

        boolean isProfane = Stream.of(phrase
            .toLowerCase()
            .split("\\s+"))
            .anyMatch(w -> blacklistPhraseSet.contains(w));