问题标签 [spliterator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Understanding Spliterator, Collector and Stream in Java 8
I am having trouble understanding the Stream
interface in Java 8, especially where it has to do with the Spliterator
and Collector
interfaces. My problem is that I simply can't understand Spliterator
and the Collector
interfaces yet, and as a result, the Stream
interface is still somewhat obscure to me.
What exactly is a Spliterator
and a Collector
, and how can I use them? If I am willing to write my own Spliterator
or Collector
(and probably my own Stream
in that process), what should I do and not do?
I read some examples scattered around the web, but since everything here is still new and subject to changes, examples and tutorials are still very sparse.
java - 从数组中创建一个高效的 Java 8 排序 Spliterator
在 Java 8 中,提供了各种方便的实用程序来从数组构建高效的 Spliterators。但是,没有提供工厂方法来构建带有比较器的 Spliterator。显然 Spliterators 允许附加比较器;他们有一个getComparator()
方法和一个SORTED
属性。
图书馆作者应该如何构建SORTED
Spliterators?
java - 如何在 Iterable 上执行 Stream 函数?
在 Java 8 中,Stream
该类没有任何方法来包装 an Iterable
。
相反,我Spliterator
从 theIterable
获取,然后Stream
从StreamSupport
如下获取:
是否有其他方法可以在我缺少Stream
的一个上生成操作?Iterable
java - Java 8 中 Spliterator 的一个好的用例场景是什么?
Spliterator
Java 8中的类的一个好的用例场景是什么?
parallel-processing - 来自 JPA 存储库的 Java 8 流
我想从 JPA 存储库创建一个流。目标是将来自回购的实体(可能超过一百万)映射到其他实体,这些实体又将存储在另一个回购中。
到目前为止,我构建了一个收集器,它将收集给定数量(例如 1000 个)实体,然后将它们存储到目标存储库中。这将在并行流中工作。我现在需要的是一种从源 Repo 获取实体并在需要时将它们输入 Stream 的好方法。
到目前为止最有希望的是实现一个供应商(http://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html)来通过生成构建流,但我没有找到当对源 Repo 的查询不提供另一个实体时终止进程的方法。
任何指针?
interface - Java 8:接口中的 Spliterator、Iterator、Collection 和“默认”实现(名为 spliterator 的重复方法)
在 Java 1.8.0_25 发布到荒野之后有一个有趣的情况......我相信我的问题的根源主要与接口中“默认”实现的新(到 1.8)特性有关。
我正在开发的应用程序目前的目标是 1.7,到目前为止它运行良好。直到用户开始更新到 1.8。现在我们的用户已经开始更新到 1.8,我们的手在某种程度上被迫转向 1.8 支持。
我们已经修复了大部分问题(主要与 1.7 和 1.8 之间对 JavaFX 包的更改有关),但还有一个令人烦恼的问题。
根据我的智慧,或者缺乏智慧,我不久前决定创建一个从 AbstractList<T> 扩展的 SortedList<T>。到目前为止,这个类运行良好,但是在 1.8 运行时运行时,我得到:
在我看来,这似乎是由 AbstractList<T> 实现的某些接口中的“默认”实现引起的(我的 SortedList<T> 类没有实现除 Serializable 之外的任何其他接口)。实现 Serializable 对我们来说是另一个问题,因为我们需要支持 SortedList<T> 对象的反序列化,没有办法解决这个问题!)。
我可以通过在我的 SortedList<T> 类中提供 spliterator() 的覆盖实现来消除错误。但是,如果构建了它,它就不再在 Java 1.7 环境中运行。如果我尝试将 SortedList<T> 与 1.7 运行时一起使用,我会得到:
这个错误非常明显,因为我们现在覆盖了 SortedList<T> 中的 spliterator() 方法,它需要包含 java.util.Spliterator,但在 1.7 中不存在。
理想情况下,如果客户不愿意,我们不希望他们更新到 Java 1.8。
我们的手是被迫在这里吗?我们是否需要强制用户更新到 1.8 并且还向任何自己更新到 1.8 的用户推出新版本?
有谁知道解决这个问题的方法?
从更哲学的角度来说,为什么接口被实现破坏了:-(。可能是一个漂亮的新功能,但他们真的应该避免做任何会导致对现有代码进行破坏性更改的事情,特别是在像列表这样基本的东西中/收藏等
任何有关此困境的帮助或建议将不胜感激。
干杯,
标记
java-8 - 不使用 Spliterator (Stream Api) 的方面
我尝试使用 AspectJ 方面查看我的拆分器以进行日志记录。然而这似乎是不可能的。方面永远不会被调用,IntelliJ 告诉我建议没有任何方法。我使用 AspectJ 1.8.1。
您将在 github 上找到 SSCCE:https ://github.com/flaviait/StreamSpliteratorAspectJExample
带注释方面的拆分器:
我的观点:
最后但并非最不重要的注释:
我在不同的环境中做了几次,效果很好。Java 8 流 api、拆分器和方面是否存在任何已知问题?也许有人可以帮助我。那很好啊!
java - Java 8 Spliterator(或类似的),如果只有一个值,则返回一个值
singleOrEmpty
我是流运营商的忠实粉丝。它不在标准库中,但我发现它非常有用。如果一个流只有一个值,它会在一个Optional
. 如果它没有值或有多个值,则返回Optional.empty()
.
我之前问了一个关于它的问题,@ThomasJungblut想出了这个很棒的实现:
唯一的问题是,你必须把它放在你的通话开始
而不是在最后依次
这使得它比其他流机制更难阅读。
因此,作为流处理的新手,有没有人知道如何在流转换序列的末尾singleOrEmpty
放置一个短路机制?
java - 不可分割的分离器
我试图了解如何Spliterator
工作,以及如何设计分离器。我认识到这trySplit()
可能是 更重要的方法之一Spliterator
,但是当我看到一些第三方Spliterator
实现时,有时我会看到他们的拆分器trySplit()
无条件返回 null。
问题:
Spliterator
普通迭代器和无条件返回 null的 a 有区别吗?似乎这样的分裂者破坏了分裂的意义。- 当然,有条件地返回 null on 的拆分器的合法用例
trySplit()
,但是否存在无条件返回 null 的拆分器的合法用例?
java - Implementing a non-parallel Spliterator for unknown size?
I'm a little confused by all my research. I have custom interface called TabularResultSet (which I've watered down for the sake of example) which traverses through any data set that is tabular in nature. It has a next() method like an iterator and it can be looping through a QueryResultSet, a tabbed-table from a clipboard, a CSV, etc...
However, I'm trying to create a Spliterator that wraps around my TabularResultSet and easily turns it into a stream. I cannot imagine a safe way to parallelize because the TabularResultSet could be traversing a QueryResultSet, and calling next() concurrently could wreak havoc. The only way I imagine parallelization can be done safely is to have the next() called by a single working thread and it passes the data off to a parallel thread to work on it.
So I think parallelization is not an easy option. How do I just get this thing to stream without parallelizing? Here is my work so far...