【发布时间】:2017-11-06 20:01:06
【问题描述】:
我有一个 java.util.stream.Stream 包含键值对,例如:
<1,3> <1,5> <3,1> <4,2> <4,7> <4,8>
现在我想合并所有具有相同键的条目:
<1,[3,5]> <3,[1]> <4,[2,7,8]>
数据已经排序,所以只需要合并连续的数据集。
现在我正在寻找一种方法来像上面一样转换流的内容,而无需将所有数据集加载到内存中。
我希望得到一个 java.util.stream.Stream 作为结果,它具有包含值列表而不是单个值的不同对象类型。
我唯一的方法是自定义迭代器,它执行合并,但转换为迭代器并返回流似乎很难看。
最好的方法是什么?
【问题讨论】:
-
您已经找到了可能是最好的可用选项。 Stream 并不真正适用于您想要的那种操作。
-
我认为
.groupBy()操作可能会起作用,具体取决于流中的确切内容。不过,@LouisWasserman 可能更了解您的要求。 -
@KevinO,OP 明确表示他们不想要 a Stream 结果,并避免将数据加载到内存中。
groupingBy不会让你这样做。 -
@tsolakp 如果我的理解是正确的:OP 已经有办法将其数据库结果集转换为流。他只是不想将所有结果集加载到内存中以获得结果(天真地使用
stream.groupBy()会产生这种讨厌的效果) -
@Andreas:
Spliterator不比Iterator丑。它更简单。
标签: java java-8 java-stream reduce