当前位置: 首页 > 知识库问答 >
问题:

消除额外的isPresent()调用从可选产生的Java流[重复]

伯和蔼
2023-03-14

我是一个相对新手流用户,我觉得应该有一个更干净的方式来完成我下面的内容。是否有可能在一个流中完成下面的代码所做的一切(消除底部的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 + "\.");
}

共有2个答案

苏涛
2023-03-14

在与equalsIgnoreCase()进行比较时,无需使用toUpperCase()

return allMappings.stream().filter(m -> category.trim().equalsIgnoreCase(m.getCategory().trim()))
                       .findAny()
                       .orElseThorw (() -> new SomeException("No mapping found for category \"" + category + "\."));
锺离声
2023-03-14

如果可选为空,请使用orelsetrow引发异常

return
    allMappings.stream()
               .filter(m -> category.trim().equalsIgnoreCase(m.getCategory().trim()))
               .findAny()
               .orElseThrow(() -> new SomeException("No mapping found for category \"" + category + "\"."));
 类似资料:
  • 我如何根据声纳lint规则更改代码? 我的代码如下: 我不能通过声纳规则。我怎么能改变我的代码?

  • 在Java8中有没有更优雅的方法来实际实现这一点呢? 我说的是后跟,我想在列表中优雅地收集具有值的结果。

  • 问题内容: 我有两个表,我想使用左外部联接将它们联接在一起。但是,即使我的左表仅包含唯一值,右表也可以多次满足CONDITION,因此会向结果集添加额外的行。 复制问题的代码: 如您所见,尽管左表保持不变,但第一个SELECT返回4行,第二个SELECT 6返回。 一个人如何严格遵守左表,而仅使用右表来补全左表中的行? 帮助! 问题答案: 抱歉,您的想法歪了。 这样考虑:如果您只希望tb1中的每一

  • 有人能解释一下<code>是可选的</code>如何帮助我们避免<code>NullPointerException</code>吗? 这段代码不是也容易出现<code>NullPointerException</code>吗?如果是这样的话,那么为什么这个代码比其他代码更受欢迎 除了帮助我们了解函数是否实际具有返回值之外,还提供了什么可能的好处

  • 我有个密码: 我收到一个警告 我怎么才能修好它?