【发布时间】:2017-10-16 22:01:56
【问题描述】:
是否可以在 Stream 中过滤更多次?例如,如果我有一个带有 ID 的列表,并且我想流式传输 HashMap 并将 HashMap 的键映射到列表中的键以及它们匹配的位置,我想从 HashMap 中获取对象并再次对其进行过滤,例如例如,该对象中大于 3 的 int 字段,最后将它们相加。例如,如果它找到了 10 种情况,其中列表的键和 HashMap 的键相等,它会过滤这 10 种情况并找到 3 种情况,例如 int 字段大于 3,它最终会返回这些情况的总和。
到目前为止,这是我的代码: 当我尝试打印结果列表时,我得到了这个: java.util.stream.ReferencePipeline$2@70177ecd
somemap.entrySet().stream().filter(e -> aListContainingIds.contains(e.getKey()))
.map(Map.Entry::getValue)
.map(n -> n.getTheOtherListFromMatchedValue().stream().filter(n -> n.getAnIntFieldFromObject() > 3))
.collect(Collectors.toList());
【问题讨论】:
-
你为什么不试试呢?
-
我会说:是的,有可能 (ironie off) 向我们展示一些您尝试过的代码
-
再用
filter代替map。也可以尝试在嵌套谓词中使用allMatch或anyMatch而不是filter。 -
或者,由于您的问题远未明确,也许您想使用
flatMap而不是第二个map,在这种情况下,嵌套谓词中对filter的调用将是正确。 -
也许在你最后一个之前阅读 cmets 会有所帮助……
标签: list filter java-8 hashmap java-stream