java - 消除 Java Stream 生成的Optional 中额外的 isPresent() 调用

标签 java option-type

我是一个相对新手的 Stream 用户,我觉得应该有一种更干净的方法来完成我下面的任务。是否可以在单个 Stream 中完成以下代码的全部操作(消除底部的 if/else)?

谢谢!

Optional<SomeMapping> mapping = allMappings.stream()
     .filter(m -> category.toUpperCase().trim().equalsIgnoreCase(m.getCategory().toUpperCase().trim()))
     .findAny();         
if (mapping.isPresent()) {
     return mapping.get();
} else {
     throw new SomeException("No mapping found for category \"" + category + "\.");
}

最佳答案

如果Optional为空,则使用orElseThrow抛出异常:

return
    allMappings.stream()
               .filter(m -> category.trim().equalsIgnoreCase(m.getCategory().trim()))
               .findAny()
               .orElseThrow(() -> new SomeException("No mapping found for category \"" + category + "\"."));

关于java - 消除 Java Stream 生成的Optional 中额外的 isPresent() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60191193/

相关文章:

Java DES 错误加密

java - 为什么 Hibernate3 被导入到我的项目中?

c# - iSynaptic.Commons 和 Maybe Monad

java - 在从 Ant 运行的 javascript 中,如何获取参数值?

java - 从java中的List中获取元素的范围

swift - 检查 Swift 字典扩展中的 nil 值

Swift:添加可选项 Ints

java - Guava 的 Optional.or() 的预期行为是什么?

java - 如何检测电子邮件地址是否真实

scala - 在 Scala 中,仅当存在可选值时才将项目添加到 Map