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

如何使用for在Java中迭代流?[副本]

贺飞星
2023-03-14
List<String> strings = Arrays.asList("a", "b", "cc");
for (String s : strings) {
    if (s.length() == 2)
        System.out.println(s);
}
for (String s : strings.stream().filter(s->s.length() == 2)) {
    System.out.println(s);
}
for (String s : strings.stream().filter(s->s.length() == 2).iterator()) {
    System.out.println(s);
}

我得到了同样的错误。这有可能吗?我真的更希望不执行stream.foreach()并传递一个消费者。

编辑:对我来说,不要复制元素是很重要的。

共有1个答案

傅越
2023-03-14

您需要一个iterable来使用for-each循环,例如集合或数组:

for (String s : strings.stream().filter(s->s.length() == 2).toArray(String[]::new)) {

或者,您可以完全删除for循环:

strings.stream().filter(s->s.length() == 2).forEach(System.out::println);

您提到您不想重构for循环,但您可以在另一个方法中提取其主体:

strings.stream().filter(s->s.length() == 2).forEach(this::process);

private void process(String s) {
  //body of the for loop
}
 类似资料:
  • 问题内容: 我们有一个元素列表,并且有一个非常简单的碰撞检测,可以将每个对象与其他每个对象进行检查。 该检查是可交换的,因此为了避免重复两次,我们将在C ++中执行此操作: 这里的关键是副本 您将如何用Java编写此代码? 问题答案: 您不能复制Java迭代器,因此没有它们就必须这样做:

  • 我是一个胡子新手,我想知道如何在这个地图上反复使用胡子 地图键名称各不相同。理想情况下,我希望mustache可以迭代其键和值。因此,在java中,它将如下所示: 所以有人能告诉我如何在小胡子中实现以上。我的意思是模板会是什么样子?我尝试了这个模板,但到目前为止还没有运气:( 所以当我运行这个模板时,输出

  • 在Java8中,类没有任何方法来包装。 相反,我将从获取,然后从获取一个,如下所示:

  • 继承了一个iterator()方法来生成。 但我需要一个而不是。

  • 问题内容: 假设我们尝试将可能引发检查异常的lambda应用于Java 8流: 这不会编译。 一种解决方法是将检查后的异常嵌套在其中,但是这会使以后的异常处理变得复杂,而且很丑陋: 另一种解决方法可能是转换限制功能,以普通的旧的foreach 循环是比较友好的检查的异常。 但是幼稚的方法失败了: 更新资料 为何在的地方贴了一个回答该问题的技巧。作为副答案本身并不能真正回答该问题。我认为这不足以使这

  • 替代的解决方法可以是将有限的函数转换为对检查的异常更友好的普通旧foreach循环。 但天真的方法是失败的: 更新 回答这个问题的一个技巧以前在Why does stream not implementing iterable 上发布过?作为旁侧答案并不能真正回答问题本身。我认为这不足以将这个问题定性为那个问题的重复,因为他们问的是不同的问题。