假设我想通过加入多个Iterable
来创建Iterable
。最快的方法是什么?
ListBuffer
++=
的
将TraversableOnce生成的所有元素追加到此列表缓冲区。
听起来像是逐个附加元素,因此应该花费Ω(size of iterable to append)
时间。我希望在Iterable
时间内加入两个O(1)
的东西。 :::
的{{1}}方法是否在List
时间运行?文档只是声明它
在此列表前添加给定列表的元素。
我还检查了performance characteristics scala集合,但它没有提到加入两个集合。
答案 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
,a
和b
为c
)
这会给你一些Iterable[Int]
Streams按需评估,因此在您实际请求任何元素之前,闭包只会发生很少的内存分配。转换为其他任何东西都是不可避免的O(number of collections to join)
。