, если вы хотите, чтобы он был одним конвейером, вы можете сделать:
List<String> strings =
Optional.of(special)
.filter(e -> !e.isEmpty())
.map(l -> l.stream().map(s -> createNewVal(s))
.collect(Collectors.toList()))
.orElseGet((() -> Collections.singletonList(myString)));
Однако я бы не рекомендовал использовать этот подход просто потому, что это не предназначенная цель Optional.
Вместо этого вам будет лучше:
List<String> result;
if(special.isEmpty())
result = Collections.singletonList(myString);
else
result = special.stream().map(s -> createNewVal(s)).collect(Collectors.toList());
- Последнее определенно более читабельно, следовательно, требует меньше усилий для мозга, чтобы попытаться выяснить, что происходит.;)
- Последний также избегает создания дополнительного экземпляра, что ведет к повышению эффективности