【发布时间】:2022-11-23 01:50:47
【问题描述】:
final Optional<List<String>> optional = Optional.of(List.of("foo", "bar"));
assertNotTrue(filter(optional).isEmpty());
public Optional<String> filter(Optional<List<String>> optional) {
return optional.filter(ch -> !ch.contains("foo")).map(ch -> ch.get(0));
}
我希望过滤掉 foo 的调用,并且应该发送 bar 作为回报。但我的回报是 Optional.empty 并且我不明白为什么。
编辑:NVM。它正在过滤整个列表,因为 foo 是列表的一部分,所以它返回的是空的!
【问题讨论】:
-
optional中的列表包含"foo",因此被过滤掉。 -
顺便说一句:Using
Optionalas argument is an antipattern,使用集合的Optional有点反模式。
标签: java java-stream