从Java Stream产生的Optional中消除多余的isPresent()调用

问题描述 投票:1回答:1

我是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 + "\.");
}
java stream java-stream
1个回答
3
投票

如果orElseThrow为空,则使用Optional引发异常:

SomeMapping mapping = 
    allMappings.stream()
               .filter(m -> category.toUpperCase().trim().equalsIgnoreCase(m.getCategory().toUpperCase().trim()))
               .findAny()
               .orElseThorw (() -> new SomeException("No mapping found for category \"" + category + "\."));
return mapping;
© www.soinside.com 2019 - 2024. All rights reserved.