Удалите пустые дополнительные функции из потока, используя 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());
Здесь есть бэк-порт от Стюарта Маркса