And*_*all 2 java monads java-8 option-type
我有一段Java代码,它从Optional#map的输入参数中包含的集合中删除一个元素
boolean ret = methodReturnsOptioanl()
.map(project -> project.getDocIds().remove(docId))
.orElse(false);
Run Code Online (Sandbox Code Playgroud)
其中project.getDocIds()返回一组字符串id并保证不为空。
我已经测试过并且可以工作;如果Optional为空或者集合中不存在docId,ret为false。
但是,Optional#map 可以执行此操作并更改成员集的状态并返回 Set#remove 操作的布尔结果吗?
我四处搜寻,找不到任何明确的答案。
用map()这种方式可以吗?不,因为map()表达了将可选元素转换为新类型的意图,而这不是您正在做的事情。
虽然不要求操作map()没有副作用,并且您的原始代码将执行您想要的操作,但它并没有执行人们期望的操作map()。未来的读者可能需要再看一遍才能了解您的代码在做什么。我会建议一些更明显的东西:
var project = methodReturnsOptional();
boolean ret = project.isPresent() && project.get().getDocIds().remove(docId);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |