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

标签 java java-stream

我从不受我控制的服务中获取了一个 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/

相关文章:

Java - 获取一周中新的一天

java - 在数据库插入之前修剪空格

java - 使用 Stream 避免 NoSuchElementException

java - 从头开始或从迭代器创建流

java - 计算给定年份的周数

java - 使用 REST API 遍历 JAVA 中的 Neo4j 节点和关系

java - 我可以更改应用程序名称吗(android :label at manifest) or icon (android:icon at manifest) dynamically?

java - for each loops as streams in Java8 - k-means

java - 关于如何改进我的实现有什么建议吗?

java - 将列表拆分为 3 个子列表 Java 8+