Java Lambda对Stream筛选的0/1个结果映射为Double变量的实现问题
问题解决方案
报错原因
你原有代码的语法错误根源是ifPresentOrElse方法返回值为void,无法将其执行结果赋值给Double类型的变量。
关于map操作的安全性说明
你完全可以使用findFirst().map(...)的写法:findFirst()返回的是Optional类型,空Optional调用map方法时不会执行内部的转换逻辑,也不会抛出NPE,只会直接返回空Optional,安全无副作用。
正确实现代码
Double result = answers.stream() .filter(ans -> ans.getQuestionId() == MY_QUESTION_ID) .findFirst() .map(Answer::getAnswerNumericVal) .orElse(null);
逻辑说明
该实现完全符合你的需求:
- 匹配到符合条件的元素时,自动提取
answerNumericVal属性赋值给result - 无匹配元素时,最终返回
null赋值给result - 全程不需要在分支方法内编写业务逻辑,仅通过流的映射操作完成取值
内容的提问来源于stack exchange,提问作者gene b.
相关产品推荐
相关产品推荐

