【问题标题】:What would be a good use-case scenario for the Spliterator in Java 8?Java 8 中 Spliterator 的一个好的用例场景是什么?
【发布时间】:2014-08-30 22:08:17
【问题描述】:

对于 Java 8 中的 Spliterator 类,什么是好的用例场景?

【问题讨论】:

标签: java data-structures iterator java-8 spliterator


【解决方案1】:

Spliterator 是永恒的 Iterator 类的扩展,它允许拆分对象流以进行迭代(Stream 通过在迭代之前收集操作来工作)。

我想不出任何时候普通开发人员必须使用SpliteratorCollectionCollections API 在 Java 8 中非常丰富,在大多数情况下,最好使用普通的 Collection 子类,而不是构建自己的 Stream 接口。

您可能想要使用Spliterator 的一个示例可能是graphs 的库,该库使用未定义标准Spliterator/stream() 的链接数据结构。

【讨论】:

  • Spliterator 不扩展 Iterator
  • @erickson 我不是说继承。它延续了Iterator概念
【解决方案2】:

通常,应用程序开发人员不会直接使用Spliterator API。但是,如果您提供 API,并实现自己的类集合类,则可以实现 Spliterator 以使您的集合适应 Stream API。这支持函数式方法、并行处理和其他功能。

例如,我编写了一个实用程序来枚举网络中的 IP 地址,由 CIDR 表示法指定。这不是一个真正的集合。也就是说,它不会一次携带内存中所有地址的列表,只有网络号和网络掩码。但是通过暴露Spliterator,它可以很容易地适应Stream。 (每个Spliterator 只跟踪其网络份额中的当前 IP 地址和最大地址。)

核心 Java 运行时的另一个示例是 DirectoryStream for traversing the file system.

【讨论】:

    【解决方案3】:

    用例示例:“将迭代器转换为流”

    public static <T> Stream<T> iteratorToFiniteStream(final Iterator<T> iterator) {
       final Iterable<T> iterable = () -> iterator;
      return StreamSupport.stream(iterable.spliterator(), false);
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 2013-10-14
      • 2016-04-13
      相关资源
      最近更新 更多