将迭代器转换为流而不进行复制
将迭代器转换为流对于利用流的强大功能非常有用,而无需创建不必要的原始收藏的副本。然而,出于性能原因,避免复制至关重要。
一种有效的方法是利用 Java 的 Spliterator 接口。我们可以从迭代器创建一个 Spliterator,为我们的流提供基础:
<code class="java">Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Stream<String> targetStream = StreamSupport.stream( Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED), false);</code>
另一种选择(有些人可能会发现更具可读性)是使用 lambda 从迭代器创建 Iterable,因为 Iterable 是一个函数式接口:
<code class="java">Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Iterable<String> iterable = () -> sourceIterator; Stream<String> targetStream = StreamSupport.stream(iterable.spliterator(), false);</code>
此方法无需中间列表,确保迭代器高效转换为流。
以上是如何将迭代器转换为流而不创建不必要的副本?的详细内容。更多信息请关注PHP中文网其他相关文章!