java - 将具有返回语句的Java普通for循环转换为Java8 IntStream

标签 java java-8

<分区>

下面是我的普通 for 循环,我想重构相同的代码以使用 java8 IntStream。

for(int i=0; i<= historyList.size(); i++) {
            if (isExist(historyList, status, i)) {
                return historyList.get(i).getCreated();
            }
        }

下面是重构后的IntStream版本

IntStream.rangeClosed(0, historyList.size()).forEach(i -> {
            if (isExist(historyList, status, i)) {
                return historyList.get(i).getCreated(); -- Error: Unexpected return value
            }
        });

但如上所示在返回时出现错误。

Error: Unexpected return value

如何以适当的方式重构上述代码?

最佳答案

IntStream#forEach不返回任何内容 (void),因此您无法从其中返回任何数据。相反,您可以将数据映射到您希望返回的类型,然后返回它(或其他一些值):

return IntStream.rangeClosed(0, historyList.size())
                .filter(i -> isExist(historyList, status, i))
                .map(historyList::get)
                .map(History::getCreated) // Or whatever the object is called.
                .findFirst()
                .orElse(null); // Or some other value.

关于java - 将具有返回语句的Java普通for循环转换为Java8 IntStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48602790/

相关文章:

java - 纹理贴图和光照顶点着色器 ErrorJava OpenGL

java - 在 Android Studio 和 JAVA 8 中使用普通 Java 项目

java - 在 Java 中使用 Optional 和 Streams

java - HQL(Hibernate)如何检查元素列表是否是另一个列表的子集?

Java - 使用字符串等在客户端和服务器之间进行通信的 "industry standard"方法是什么

java - Jersey 2 - 请求范围绑定(bind)与单例绑定(bind)

java - 为什么 ESAPI 编码器不能与 Java 1.8 一起使用

java - 在并行运行其他线程之前等待第一个线程完成

java - 在 Java 中显式调用默认方法

`(a,b) -> a+b` 的 Java8 函数类型