Удалите пустые дополнительные функции из потока, используя StreamEx

Я ищу элегантный способ для потоковой передачи только непустой Optional записи с использованием библиотеки StreamEx. Или стандартная библиотека, если это возможно.

В настоящее время я использую следующий, довольно многословный подход:

List<Optional<String>> list = 
   Arrays.asList(Optional.of("A"), Optional.empty(), Optional.of("B"));

List<String> nonEmpty = 
   StreamEx.of(list).filter(Optional::isPresent).map(Optional::get).toList();

По сути, я ищу что-то вроде StreamEx nonNull метод, но для Optional,

2 ответа

Решение

Небольшое исследование отставания в выпуске StreamEx выявило проблему 49, которая предлагает более короткий подход и содержит обсуждение темы:

List<String> nonEmpty = StreamEx.of(list).flatMap(StreamEx::of).toList();

Короче, хотя вопрос о том, является ли он более читабельным, подлежит обсуждению.

Ну, это было добавлено, но только в java-9:

list.stream()
    .flatMap(Optional::stream)
    .collect(Collectors.toList());

Здесь есть бэк-порт от Стюарта Маркса

Другие вопросы по тегам