使用基于Optional <Map>内容的流

Jan*_*ski 5 java java-stream

我从一个不受我控制的服务中得到一张可能为null的服务,并希望对其进行处理,比如说,过滤,映射和缩减为我需要的单个元素.

问题:从Optional到Stream是否有"链接"?

我试过(除其他外):

 return Optional.ofNullable(getMap())
   .map(Map::entrySet) // gets the entryset
   .map(Stream::of)
   .orElseGet(Stream::empty)
   // i would then like to continue with
   .filter(e -> e.getKey().startsWith("f")
   .map(Entry::getValue)
   .findFirst();
Run Code Online (Sandbox Code Playgroud)

但后来我没有... Stream<Entry>Stream<Set<Entry>>有没有办法以某种方式flatMap一个集合或地图的可选?

注意:我对这里流畅,纯粹的流/可选方法感兴趣.当然,当我首先将地图保存到local var并确保它不为null时,它会起作用.

mar*_*ran 8

你的错误在于这一行:

.map(Stream::of)
Run Code Online (Sandbox Code Playgroud)

of函数采用单个参数(或vararg参数),并返回仅包含该元素的流.你会得到一个Stream<Set<Map.Entry>>.相反,您应该在entryset上调用stream方法,如下所示:

.map(Set::stream)
Run Code Online (Sandbox Code Playgroud)