我想做的事情显示在下面的2个流调用中。我想根据某种条件将一个集合分成2个新集合。理想情况下,我想在1中做到这一点。我已经看到了流的.map函数所使用的条件,但是forEach找不到任何东西。实现我想要的最好的方法是什么?
animalMap.entrySet().stream()
.filter(pair-> pair.getValue() != null)
.forEach(pair-> myMap.put(pair.getKey(), pair.getValue()));
animalMap.entrySet().stream()
.filter(pair-> pair.getValue() == null)
.forEach(pair-> myList.add(pair.getKey()));
只需将条件放入lambda本身,例如
animalMap.entrySet().stream()
.forEach(
pair -> {
if (pair.getValue() != null) {
myMap.put(pair.getKey(), pair.getValue());
} else {
myList.add(pair.getKey());
}
}
);
当然,这假设两个集合(myMap
和myList
)在上述代码之前都已声明和初始化。
更新:Map.forEach
如JornVernee所建议的那样,使用可以使代码更短,更高效,更易读。
animalMap.forEach(
(key, value) -> {
if (value != null) {
myMap.put(key, value);
} else {
myList.add(key);
}
}
);
替代的解决方法可以是将有限的函数转换为对检查的异常更友好的普通旧foreach循环。 但天真的方法是失败的: 更新 回答这个问题的一个技巧以前在Why does stream not implementing iterable 上发布过?作为旁侧答案并不能真正回答问题本身。我认为这不足以将这个问题定性为那个问题的重复,因为他们问的是不同的问题。
我想比较一下id,这里,如果id等于5,做这个,否则做那个。我怎样才能做到这一点?
如何将下面的if/else语句转换为java流管道? 我有一个选择 部分解决方案:
问题内容: 我有一个试图在Selenium IDE中单击的复选框-但前提是它尚未处于活动状态。 我正在使用Selenium IDE创建测试,并使用htmlsuite运行测试-有人知道我可以在其中使用“ if”吗? 问题答案: 您必须从官方页面下载Selenium IDE的插件(一直下去)。 我发现的最有用的链接是此链接,因为其中有一个完整的示例:http : //selenium.10932.n7
问题内容: Python 2.7+中是否存在一种进行以下操作的方法? 我知道您只要使用’if’就可以做任何事情: 问题答案: 您已经知道了:是有效的Python表达式。所示的dict理解的唯一问题是dict理解中表达式的位置必须有两个表达式,并用冒号分隔: final子句充当过滤器,这与具有条件表达式不同。