当前位置: 首页 > 知识库问答 >
问题:

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

姬雪松
2023-03-14

下面是我的普通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个答案

洪梓
2023-03-14

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.
 类似资料:
  • 如何将下面的for循环with return语句转换为lambda表达式或流with filter。

  • 问题内容: 我有一个二维布尔数组’poorSignal’,需要编写一个返回网格的方法,如果数组上的某个点为true,则显示X,如果为false,则显示O。这是我的代码: 当我编译时,它在方法的最后一行给出了“丢失的返回语句”。我也不确定在打印数组时’return“ \ n”是否可以添加新行。 这是一个分配问题,所以我不能直接打印它,也不能仅打印布尔值-它必须是产生网格的方法。 问题答案: 编译器无

  • 我得到的错误是“缺少return语句”,代码如下: 有人能帮帮我吗?多谢.

  • 问题内容: 我读到 增强的for循环 比普通的 for循环 更有效: http://developer.android.com/guide/practices/performance.html#foreach 当我搜索它们的效率之间的差异时,我发现的是:如果是普通的for循环,我们需要一个额外的步骤来找出数组的长度或大小等, 但这是唯一的原因,增强的for循环优于普通的for循环吗?在那种情况下,

  • 问题内容: 因此,我正在为不和谐而开发一个聊天机器人,现在正在开发一个可以用作待办事项列表的功能。我有一个命令可以将任务添加到列表中,并将它们存储在字典中。但是,我的问题是以更易读的格式返回列表(参见图片)。 任务存储在一个称为中。但是,为了使bot实际发送消息,我需要使用一条语句,否则它将仅将其打印到控制台而不是实际的聊天记录(参见图片)。 这是我尝试解决的方法,但是由于我使用了for循环,因此

  • 我已经了解了一些关于流的知识,并且知道它们可以用来代替循环。对于这个玩具示例,我使用一个图形数据库来存储一组字符串。数据库将它们存储为顶点。我想检索这些顶点,并将它们转换为字符串,而是使用流。每个顶点都有一组性质;我给它一个键,它返回一个值。如果一个顶点具有我正在寻找的属性,我将它添加到列表中。如果没有,我存储顶点ID。 我有一个for循环,但我不确定如何使用流来代替。代码如下: