gpt4 book ai didi

java - 将流变成可迭代?

转载 作者:行者123 更新时间:2023-12-03 01:02:15 25 4
gpt4 key购买 nike

Stream 继承iterator()产生 Iterator 的方法。

但我需要一个 Iterable 而不是 Iterator

例如,给定以下字符串:

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

...我需要将字符串的这些部分作为 Iterable 传递到特定的库。调用input.lines()产生 Stream 。所以如果我能做到 Stream 我就做好了进入Iterable其元素。

最佳答案

Why does Stream<T> not implement Iterable<T>? 中所述,Iterable 承载着能够多次提供 Iterator 的期望,这是 Stream 无法实现的。因此,虽然您可以从 Stream 中创建一个 Iterable 以供临时使用,但您必须小心是否可能存在多次迭代它的尝试。

既然您说,“我需要将字符串的这些部分作为 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));

关于java - 将流变成可迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59869486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com