У меня есть список «блоков», которые могут быть нулевыми. Каждый из блоков содержит список имен, которые также могут быть нулевыми. Я пытаюсь найти, является ли какое-либо из имен во всех блоках словом "blurb".
У меня есть следующий код, который работает:
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 мог вернуть ноль, я должен проверить это в следующем утверждении. Я мог бы обернуть его в другой Optional на тот момент, но тогда я получу Optional<Stream<Optional<List<String>>>>
Использование names -> names != null
кажется более чистым? Или есть способ упростить это?