在Scala中连接两个迭代(或序列)的最快方法是什么?

时间:2017-08-29 10:01:27

标签: scala collections

假设我想通过加入多个Iterable来创建Iterable。最快的方法是什么?

ListBuffer ++=

Documentation表示

  

将TraversableOnce生成的所有元素追加到此列表缓冲区。

听起来像是逐个附加元素,因此应该花费Ω(size of iterable to append)时间。我希望在Iterable时间内加入两个O(1)的东西。 :::的{​​{1}}方法是否在List时间运行?文档只是声明它

  

在此列表前添加给定列表的元素。

我还检查了performance characteristics scala集合,但它没有提到加入两个集合。

1 个答案:

答案 0 :(得分:2)

您可以创建(root, query, criteraBuilder) -> { Join<User,Order> join = root.join(???,JoinType.LEFT); join.on(blablabla_condition) }

Stream

或连接迭代器(无论如何这都会在运行时为你提供Stream(a, b, c).flatten

Stream

(假设(a.iterator ++ b.iterator ++ c.iterator).toIterable abc

这会给你一些Iterable[Int]

的内容

Streams按需评估,因此在您实际请求任何元素之前,闭包只会发生很少的内存分配。转换为其他任何东西都是不可避免的O(number of collections to join)