一个列表至少包含另一个列表中的一个值(Java 8)

Bic*_*ick 6 java lambda java-8 java-stream

我的函数查找列表中给定单词的列表中是否有一个单词在页面中有效。因此,当页面包含单词时,我将其编写如下:(简化版)

private boolean atLeastOneWordIsValidInThePage(Page page, Set<Long>  wordIdsToCheck) 
    Set<Long> wordIds = page.getWords().stream()
                .filter(word -> word.isValid())
                .map(word->getWordId())
                .collect(Collectors.toSet());
return words.stream().anyMatch((o) -> wordIds.contains(o));
Run Code Online (Sandbox Code Playgroud)

编写它是最好的java 8实践吗?
我想在找到第一个匹配项时停止搜索。

CKi*_*ing 5

无需打开两个单独的流。您应该能够anyMatch直接链接到该map函数,如下所示:

return page.getWords().stream()
            .filter(word -> word.isValid())
            .map(word->getWordId())
            .anyMatch((o) -> words.contains(o));
Run Code Online (Sandbox Code Playgroud)

  • 你甚至可以去掉 `(o) -&gt;` 并使用方法引用。 (3认同)