我从不受我控制的服务中获取了一个 map ,该 map 可能为 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();
但后来我没有Stream<Entry>
但是Stream<Set<Entry>>
...有没有办法以某种方式对集合进行平面映射或从 Optional 映射出来?
注意:我对此处的流畅、纯流/可选方法感兴趣。当我首先将 map 保存到本地 var 并确保它不为 null 时,它当然有效。
最佳答案
你的错误在这一行:
.map(Stream::of)
of
函数采用单个参数(或可变参数),并返回仅包含该元素的流。因此你会得到一个 Stream<Set<Map.Entry>>
.相反,您应该在条目集上调用流方法,如下所示:
.map(Set::stream)
关于java - 使用基于 Optional<Map> 内容的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44567806/