将具有return语句的Java普通for循环转换为Java8 IntStream

将具有return语句的Java普通for循环转换为Java8 IntStream,java,java-8,Java,Java 8,下面是我的普通for循环,我想重构相同的代码以使用java8 IntStream for(int i=0; i<= historyList.size(); i++) { if (isExist(historyList, status, i)) { return historyList.get(i).getCreated(); } } 但返回时出现错误,如上所示 错误:意外的返回值 如何以适当的

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

for(int i=0; i<= historyList.size(); i++) {
            if (isExist(historyList, status, i)) {
                return historyList.get(i).getCreated();
            }
        }
但返回时出现错误,如上所示

错误:意外的返回值

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

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


你的问题缺少一个可能有用的答案。你为什么要这样做?我觉得您的代码的原始版本比您可以编写的任何“流式”版本更具可读性。值得注意的是,根据isExist方法所做的事情,重写它以获取当前的
历史
,而不是(大概)按索引访问
列表
。这将节省大量对
列表的随机访问。
IntStream.rangeClosed(0, historyList.size()).forEach(i -> {
            if (isExist(historyList, status, i)) {
                return historyList.get(i).getCreated(); -- Error: Unexpected return value
            }
        });
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.