如何解决Java 8:将流中的值分配给变量?
我刚刚开始学习java8中的流。我正在尝试将每个循环的基本内容转换为执行完全相同的操作的流。我在这里检查过,发现了这一点: Convert For-Loop into Java stream。这样做的问题是该示例在最后收集了结果,我认为我不需要收集任何东西,只需分配未解释的值即可。
我要转换的循环是这个。如您所见,我想将值分配给vanTire。
VanTire vanTire = null;
for (Object tire : tireList) {
if (tire instanceof VanTire) {
vanTire = (VanTire) tire;
}
}
到目前为止,我对流的了解是这样的。既然已经完成过滤和转换,如何将值分配给vanTire变量?
tireList.stream()
.filter(VanTire.class::isInstance)
.map(VanTire.class::cast)
解决方法
获取正确的项目后,您需要使用.findFirst
或.findAny
来获取元素,并使用orElse
来提供默认值
VanTire vanTire = (VanTire) tireList.stream().filter(VanTire.class::isInstance)
.findAny().orElse(null);
,
通常为Stream
s should be stateless。这是由于Stream
中的元素可能被无序处理的事实。因此,我建议不要从Stream
内部分配值,而是从可分配给所需类型的流中产生结果的方法:
VanTire vanTire = tireList.stream()
.filter(VanTire.class::isInstance)
.findAny()
.map(VanTire.class::cast)
.orElse(null);
我使用了.orElse(null)
,因为它映射了wrt提供的示例代码的语义。 tireList
为空时的行为。但是,根据业务情况,使用Optional
或调用orElseThrow(...)
继续计算可能是更好的选择。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。