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

如何在所需数量的结果后退出Java流处理?

濮阳祯
2023-03-14

我有以下代码,它使用Stream API来查找卡路里超过300的集合中的前3个元素的名称:

List<Dish> dishes = ....
List<String> unhealthyDishes = dishes.stream()
                                     .filter(dish -> dish.getCalories() > 300)
                                     .map(dish -> dish.getName())
                                     .limit(3)
                                     .collect(Collectors.toList());

在传统的基于迭代器的命令式方法中,我可以保留结果的计数,因此一旦我得到所需数量的元素,就可以退出迭代循环。但是上面的代码似乎贯穿了集合的整个长度。我如何停止这样做,并在得到我需要的3个元素后停止?

共有1个答案

乜清野
2023-03-14

你怎么知道它也检查其他元素?我刚刚设置了这个小测试:

String[] words = {"a", "a", "a", "aa"};
        
List<Integer> shortWords = Arrays.stream(words)
     .filter(word -> {
             System.out.println("checking " + word);
             return word.length() == 1;
             })
     .map(String::length)
     .limit(3)
     .collect(Collectors.toList());
        
System.out.println(shortWords);

输出结果是:

checking a
checking a
checking a
[1, 1, 1]
 类似资料:
  • 我有一个KStream与用户点击和使用userID作为关键也包含用户详细信息的KTable也使用userID作为关键。KStream和KTable都有一些分区,使用相同的分区策略和相同的键。 当我在这两个之间使用左连接时,大多数点击事件都没有与用户详细信息匹配,有一些匹配。但是当我用GlobalKTable更改KTable时,这些缺失的匹配会消失所有必需的用户点击都富含用户详细信息。 什么会导致这

  • 这个函数很简单,关键是执行完后,comment的变量值会保存。 push -m '1th' 函数调用完成了,看看 变量的值,如何自动清除呢?我不甘心写成下面的形式 程序很大的话,unset将是一个很多的行。

  • 在Java8的Streams中,我知道如何基于谓词过滤集合,并处理谓词为true的项。我想知道的是,如果谓词仅将集合划分为两个组,那么是否可以通过API基于谓词进行过滤,处理过滤结果,然后立即连接调用以处理过滤器排除的所有元素? 例如,考虑以下列表: 是否有可能做到: 或者我只需对过滤的项目执行过程,然后调用原始列表上的和,然后处理剩余的项目? 谢谢

  • 如何在 postman 中验证响应中的所有数据返回 id、名字、姓氏等的结果数量 下面是响应的样子: 我想验证两件事: 1)响应返回id,first_name,last_name,电子邮件 2)所有的first_name都等于“Sebastian ”,不管只有一个结果还是100个结果 这是我尝试过的,但它只适用于一个结果:

  • 问题内容: 我需要查询里面有很多在它的数据的Sybase数据库,并希望设置限制,因此DB后10个结果停止查询。 关键的是性能,因此,如果找遍了所有结果,然后再回到过去的10个结果将是没有用的。 提前致谢 问题答案: 我相信你可以做一个,然后再在这个环节中的所有查询,直到进一步的将返回不超过10行。正如评论指出,这会影响 所有 在会议之后的查询(不只是S ^!),直至关闭(通过设置为0),或设置不同

  • 问题内容: 我使用的是SQL Server 2005 Service Pack2(SP2)(v9.0.3042),那里发布的解决方案对我不起作用。我尝试使用两个连接字符串。我的代码中有一个被注释掉了。 我意识到我可以将所有结果存储在内存中的List或ArrayList中,然后将其返回。我已经成功地做到了,但这不是这里的目标。目标是能够在结果可用时流式传输。 使用我的SQL Server版本可以吗?