2017-01-29 6 views
4

リスト内の指定された単語のリストから、ページ内で有効な単語が1つあるかどうかを調べます。 (簡易版)それはそれを書くための最善のJava 8プラクティスリストには別のリスト(Java 8)の値が少なくとも1つ含まれています

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

です: だからときにページは次のように私はそれを書かれている言葉が含まれていますか?
最初の一致が見つかったときに検索を停止します。

+2

セット・ベースのルックアップを行うことと同じ複雑さを持っている必要があります。次のように直接map関数にチェーンanyMatchにできるはずです。私の意見では 'wordIds'を構築する必要はありません。 –

+0

興味深いアプローチはhttp://stackoverflow.com/questions/8708542/something-like-contains-any-for-java-setにあります(すべての回答をスクロールしてください)。 –

答えて

3

2つの別々のストリームを開く必要はありません。私はセットにストリームを集める推測

return page.getWords().stream() 
      .filter(word -> word.isValid()) 
      .map(word->getWordId()) 
      .anyMatch((o) -> words.contains(o)); 
+1

'(o) - >'を削除してメソッド参照を使用することもできます。 –

+0

@PavelHoralフェアポイント。 OPコードの近くにコードを保存しようとしています。 – CKing

+1

また、 'map'(OPTIONSコードには' word.'がありません)に関するtypoがありますが、それは答えではなく質問の問題です。 –

関連する問題