Следующий метод даст вам groupByOrdered
метод, который ведет себя так, как вы искали.
import collection.mutable.{LinkedHashMap, LinkedHashSet, Map => MutableMap}
object GroupByOrderedImplicit {
implicit class GroupByOrderedImplicitImpl[A](val t: Traversable[A]) extends AnyVal {
def groupByOrdered[K](f: A => K): MutableMap[K, LinkedHashSet[A]] = {
val map = LinkedHashMap[K,LinkedHashSet[A]]().withDefault(_ => LinkedHashSet[A]())
for (i <- t) {
val key = f(i)
map(key) = map(key) + i
}
map
}
}
}
Когда я использую этот код как:
import GroupByOrderedImplicit._
0.to(100).groupByOrdered(_ % 10).foreach(println)
Я получаю следующий вывод:
(0,Set(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100))
(1,Set(1, 11, 21, 31, 41, 51, 61, 71, 81, 91))
(2,Set(2, 12, 22, 32, 42, 52, 62, 72, 82, 92))
(3,Set(3, 13, 23, 33, 43, 53, 63, 73, 83, 93))
(4,Set(4, 14, 24, 34, 44, 54, 64, 74, 84, 94))
(5,Set(5, 15, 25, 35, 45, 55, 65, 75, 85, 95))
(6,Set(6, 16, 26, 36, 46, 56, 66, 76, 86, 96))
(7,Set(7, 17, 27, 37, 47, 57, 67, 77, 87, 97))
(8,Set(8, 18, 28, 38, 48, 58, 68, 78, 88, 98))
(9,Set(9, 19, 29, 39, 49, 59, 69, 79, 89, 99))