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

如何将流转换为可迭代的?[副本]

江鸿羲
2023-03-14

stream继承了一个iterator()方法来生成迭代器

但我需要一个iterable而不是iterator

String input = "this\n" +
        "that\n" +
        "the_other";

共有1个答案

汪欣德
2023-03-14

正如在“为什么流 不能实现迭代 ?”中所解释的那样, iterable期望能够多次提供 迭代器而这是 stream无法实现的。因此,虽然您可以从 中创建一个 iterable以供特别使用,但您必须小心是否存在多次迭代它的尝试。

既然您说过,“我需要将string的那些部分作为iterable传递给特定的库”,那么就没有通用的解决方案,因为使用iterable的代码不在您的控制范围之内。

但是如果您是创建流的人,则可以创建一个有效的iterable,它将在每次请求iterator时简单地重复流构造:

Iterable<String> lines = () -> "this\nthat\nthe_other".lines().iterator();

这满足了支持任意数量迭代的期望,同时在只被遍历一次时不会消耗比单个流更多的资源。

for(var s: lines) System.out.println(s);
lines.forEach(System.out::println);
System.out.println(String.join("\n", lines));
 类似资料:
  • 问题内容: 如果我有一个包含字符串的可迭代对象,是否有一种简单的方法可以将其转换为流?我想做这样的事情: 问题答案: 这是我的流式迭代器,它是urllib3的实验分支,它支持通过可迭代的流式分块请求: 带有上下文的源代码:https : //github.com/shazow/urllib3/blob/filepost- stream/urllib3/filepost.py#L23 相关单元测试:

  • 我正在寻找一种简洁的方法来将转换为或者更具体地说,将迭代器作为流“查看”。 出于性能原因,我希望避免在新列表中出现迭代器的副本: 基于评论中的一些建议,我还尝试使用: 但是,我得到一个(因为没有调用) 我查看了和,但没有找到任何东西。

  • 问题内容: 我正在寻找一种将a 转换为或更具体地以将“迭代器”作为流“查看”的简洁方法。 出于性能原因,我想避免在新列表中复制迭代器: 根据评论中的一些建议,我也尝试使用: 但是,我得到了(因为没有调用hasNext) 我已经看过和,但我没有发现任何东西。 问题答案: 一种方法是从迭代器创建一个拆分器,并将其用作流的基础: 一个可能更易读的替代方法是使用Iterable-使用lambda从Iter

  • 这可能吗(伪Java): 更笼统地说,在流上是否有一个操作可以增加流中的元素数量(而不是像那样减少元素数量)?

  • 假设您有一个类似数组的Javascript ES6 Iterable,您事先知道它的长度是有限的,将其转换为Javascript数组的最佳方法是什么? 这样做的原因是许多js库(如underscore和lodash)仅支持数组,因此如果您希望在可迭代上使用它们的任何函数,则必须首先将其转换为Array。 在python中,您可以只使用list()函数。ES6中是否有同等标准?

  • 我想用可选的。由于只能连接流,我有以下问题: 如何将可选 转换为流 ? 示例: