【发布时间】:2017-07-26 06:01:14
【问题描述】:
如何使用collect 方法在嵌套的ifPresent 方法中收集?
到目前为止,这是我所拥有的:
List result = list.stream()
.findFirst()
.ifPresent(info -> {
info.getMap()
.stream()
.filter( entry -> entry.getKey().equals("test"))
.map(entry::getValue)
.collect(Collectors.toList())
});
【问题讨论】:
-
为什么必须是
ifPresent?为什么不是flatMap? -
或者更确切地说是 map(),在这种情况下。另外,不要使用原始类型。
-
为什么要根据其键过滤 Map - 这意味着您正在迭代所有元素,并且存在 Map 以避免这种情况。那么为什么不直接使用
info.getMap().get("test")呢?Optional<Object> result = list.stream().findFirst().flatMap(info -> Optional.ofNullable(info.getMap().get("test")));之类的东西——为什么你首先需要一个 List 作为结果类型? -
我在我的答案中添加了第二个编辑,其中包含一些 OP 可能尝试做的示例(基于上述 cmets)。我认为我们有一套全面的方法来回答他/她目前正在尝试做的任何类型的实现:)
标签: java lambda java-8 java-stream collectors