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

时间:2018-02-03 22:36:50

标签: 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
            }
        });

但如上图所示,在返回时收到错误。

  

错误:意外的返回值

如何以正确的方式重构上述代码?

1 个答案:

答案 0 :(得分:5)

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

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.