如果流未返回结果,则Java 8引发异常

时间:2019-07-03 12:07:02

标签: java

我很好奇,是否可以在以下情况下使用orElseThrow(),或者是否有更多的Java 8方法可以等效于1-liner?

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;
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您可以尝试以下方法:

Collection<Foo> foo = blah.stream().filter(somePredicate)
    .collect(Collectors.collectingAndThen(Collectors.toList(), Optional::of))
    .filter(l -> !l.isEmpty())
    .orElseThrow(() -> new Exception("blah"))

请注意,与您的代码相比,这会分配额外的Optional实例。