将具有return语句的Java普通for循环转换为Java8 IntStream
下面是我的普通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(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.