リストのオプションのリスト内の文字列を検索します

user1178830:

私はnullになる可能性が「ブロック」のリストを持っています。各ブロックはまた、nullになる可能性が名前のリストが含まれています。私はすべてのブロック内の名前のいずれかが言葉「宣伝文句」である場合に見つけようとしています。

私は仕事をして、次のコードを持っています:

private boolean containsText(List<Blocks> blocks) {
        return Optional.ofNullable(blocks)
            .map(Collection::stream)
            .map(o -> o.map(Blocks::getNames))
            .map(e -> e.anyMatch(names -> names != null && names.contains("blurb")))
            .orElse(false);
}

getNamesがnullを返すことができますので、しかし、私は次の文でそれを確認する必要があります。私はその時点で別のオプションでそれをラップすることができ、その後私は、で終わるだろう Optional<Stream<Optional<List<String>>>>

使用してnames -> names != null クリーンなようですか?それともこれを簡素化する方法はありますか?

また:

使用せずに別の単純な変形は、Optional単に次のようになります。

private boolean containsText(List<Blocks> blocks) {
    return blocks != null && blocks.stream()
            .map(Blocks::getNames)
            .filter(Objects::nonNull)
            .anyMatch(list -> list.contains("blurb"));
}

:あなたの問題の一つは、あなたが言うなデザインで、「私はnullになる可能性が『ブロック』のリストを持っている」、あなたは、このような表現のための空のリストを返すためにそれを修正する必要があり、その後を取り除くnull上記のチェックコード。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=8226&siteId=1