使用StreamEx从Stream中删除空的Optionals

Hen*_*sen 3 java java-8 java-stream 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();
Run Code Online (Sandbox Code Playgroud)

我基本上是在寻找像StreamEx这样的nonNull方法,但对于Optional.

Eug*_*ene 6

这已添加,但仅限于java-9:

list.stream()
    .flatMap(Optional::stream)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

有一个从斯图尔特标志着回端口这里

  • 但你可以比Stuart Marks更短:`.flatMap(o - > o.map(Stream :: of).orElse(null))` (5认同)
  • @Holger很漂亮!我无法立即理解它,但是如果映射的Stream为null,则使用空流,而不是* (3认同)