我有很多項目的迭代器,所以我不能將它轉換爲Iterable for groupBy,並且不想將所有結果記錄在內存中。 但我知道所有的對象是由groupBy字段排序的,所以似乎可以爲排序後的迭代器實現groupBy ... scala集合中是否已經有一些方法可以做到這一點?在Scala中是否有迭代版本的groupBy?
3
A
回答
4
我的解決辦法:
def iterativeGroupBy[T, B](iterO: Iterator[T])(func: T => B): Iterator[List[T]] = new Iterator[List[T]] {
var iter = iterO
def hasNext = iter.hasNext
def next = {
val first = iter.next()
val firstValue = func(first)
val (i1,i2) = iter.span(el => func(el) == firstValue)
iter = i2
first :: i1.toList
}
}
3
奇怪的是groupBy
不上Iterator
,但這個怎麼樣?
val it = Iterator(1, 2, 3)
new Iterable[Int] { def iterator = it }.groupBy(_ % 2 == 0)
看來工作(儘管它絕不是一種保障,因爲一個應該產生與Iterable
每次都在同迭代器)。
+1
這是內存中的解決方案,但我想按大多數SQL數據庫的方式按無限大小集合進行分組...... – yura
相關問題
- 1. TFS中有多個版本的迭代
- 2. 在Scala中迭代JSONArray
- 3. 是否有像「迭代迭代,如果它有元素,否則...」?
- 4. Scala中的嵌套迭代
- 5. 這段代碼是否有VB.NET版本?
- 6. 在clojure中,是否有遞歸版本的代碼記錄?
- 7. 如何在Scala中迭代map的值?
- 8. 在Scala中迭代豐富的枚舉
- 9. Ruby迭代版本號
- 10. scala迭代java hashSet
- 11. 分享迭代器是否可迭代?
- 12. Postgresql:Oracle sqlplus中是否有「@@」的psql版本?
- 13. 是否版本代碼,版本名稱的alpha版本影響生產版本
- 14. 是否可以在Google Apps腳本中迭代ENUM的?
- 15. jdk9中是否有WindowsLookAndFeel.java的替代版本?
- 16. 是否有「連續」版本?
- 17. VimGolf是否有Emacs版本?
- 18. BN_bin2bn是否有python版本?
- 19. ubuntu32bit是否有RXTX版本?
- 20. jconsole是否有CLI版本?
- 21. 是否有可能在Lua中創建迭代器來迭代字典?
- 22. 在Scala包裝列表中迭代
- 23. 在Scala中使用java迭代器
- 24. 如何在Scala中複製迭代器?
- 25. 在Scala中合併兩個迭代器
- 26. 在Scala中迭代Java集合
- 27. 無法在Scala中迭代Java列表
- 28. 如何在scala中迭代accumulableCollection
- 29. 迭代火花的Scala
- 30. 在Scala 2.8.0中迭代Java Map的新方法是什麼?
必須注意的是,這段代碼與其他集合上的'groupBy'完全不同。無論如何,需要遍歷整個集合的「真實」組,因此我懷疑你不能擁有內存中的解決方案。 – Rogach
但是,假設「所有對象都按groupBy字段排序」,兩種方法都是相等的。 – yura
啊。錯過了你的問題。 – Rogach