首页 >Java >java教程 >如何将迭代器转换为流而不创建不必要的副本?

如何将迭代器转换为流而不创建不必要的副本?

Patricia Arquette
Patricia Arquette原创
2024-11-06 13:11:02243浏览

How can I convert an Iterator to a Stream without creating unnecessary copies?

将迭代器转换为流而不进行复制

将迭代器转换为流对于利用流的强大功能非常有用,而无需创建不必要的原始收藏的副本。然而,出于性能原因,避免复制至关重要。

一种有效的方法是利用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn