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

使用Java流,如何过滤一个集合,使结果包含所有元素,直到找到匹配为止?

满昊然
2023-03-14
new MyObj("some"),
new MyObj("foo"),
new MyObj("bar"),
new MyObj("xyz");

并在匹配一些条件后用Java8流对其进行过滤

myObj.prop = "foo";

那将如何完成呢?

上面示例的结果应该是

new MyObj("some"),
new MyObj("foo")
List<MyObj> results = new ArrayList<>();
for (MyObj myObj : myObjList) {
  if (!myObj.prop.equals("foo")) {
    results.add(myObj);
  } else {
    results.add(myObj);
    break;
  }
}

共有1个答案

晋承运
2023-03-14

不幸的是,流API不直接支持这种场景。即使是Java9中新出现的takewhile方法也不能解决这个问题。一些免费的第三方流API扩展有一个您需要的方法。例如,Joo中的limitWhileClosed或StreamEx(我写的库)中的takeWhileInclusive。下面是一个示例,如何通过Streamex实现:

List<MyObj> results = StreamEx.of(myObjList)
    .takeWhileInclusive(myObj -> !myObj.prop.equals("foo")).toList();

Joo的版本看起来很相似。

在不使用第三方库的情况下,您可以通过两个步骤来解决此问题:

int idx = IntStream.range(0, myObjList.size())
         .filter(i -> myObjList.get(i).prop.equals("foo"))
         .findFirst().orElse(myObjList.size());

List<MyObj> results = myObjList.stream().limit(idx+1).collect(Collectors.toList());
 类似资料:
  • 本文向大家介绍如何获得包含每个匹配元素集的所有唯一直接子元素的元素集?,包括了如何获得包含每个匹配元素集的所有唯一直接子元素的元素集?的使用技巧和注意事项,需要的朋友参考一下 children([selector])方法获取一组元素,其中包含每个匹配元素集的所有唯一直接子代。 示例 您可以尝试运行以下代码,以了解如何获取包含每个匹配元素集的所有唯一立即子元素的元素集:

  • 我有以下函数,它试图逐步缩小输入集合的范围,直到找到单个元素,即当发现单个项目时,过滤应该停止,因为应用其他过滤器可能会导致根本不匹配。 随着每增加一个嵌套级别,这变得越来越难阅读,我想知道是否有更简洁的方法来编写这篇文章。 优选地,该方法应最多执行一次每个过滤步骤(尽管输入大小较小且过滤成本较低-对于同一输入可以执行多次),并包含单个出口点。

  • 问题内容: 如何通过所有多词搜索仅获取经过过滤的匹配结果。我有这个示例表,其中titleid是一个映射int字段,personid是一个关键字: 删除结果为: 使用这样的示例查询: 我得到以下结果: 也许这会有所帮助,我在sql中进行了查询并获得了预期的结果。我所做的是让查询给我与搜索到的参数数量匹配的titleid之和。这只是为了更多地自我解释,其思想是使用elasticsearch。 问题答案

  • 我正在使用Selenium进行一些Webscraphing操作,现在我想在链接文本、按钮文本、元素、元素或中找到用户可以单击的所有元素,这些元素包含单词“download”(任何大写)。这可以包括链接、按钮或任何其他元素。 在这个答案中,我找到了一个xpath供那些寻找xpath的人搜索基于特定文本(或不区分大小写和部分匹配)的按钮: 但在此页面上,即使有以下链接,也不会返回任何结果: 有没有人知

  • 问题内容: 我想找到在其标签集中包含 所有 给定标签的项目。 以下是简化的类: 如果我这样尝试 我得到包含 任何 给定标签的项目。这不足为奇,但我希望包含 所有 给定标签的项目。所以我尝试另一种方式: 我收到错误消息。如果仅包含一个标签,它将起作用,但失败的原因不止于此。 如何在JPQL中表达呢? 问题答案: 诀窍是使用计数:

  • 问题内容: By Company   我需要捕获上述元素的xpath。我尝试了以下替代方法,但在Chrome中似乎没有任何效果。您能否建议其他选择。 问题答案: 要查找元素: 您可以使用以下xpath之一: 使用: 使用: 但是,理想情况下,您可能希望避免使用 NO-BREAK SPACE 字符,并使用以下任一解决方案: 使用: 使用: 参考 您可以在以下位置找到相关的详细讨论: 使用XPATH搜