Я думаю, что вы ищете permutations
.Вы можете отобразить результирующие списки в структуру, которую вы ищете:
Seq(1,2,3).permutations.map(p => (p.head, p.tail)).toList
res49: List[(Int, Seq[Int])] = List((1,List(2, 3)), (1,List(3, 2)), (2,List(1, 3)), (2,List(3, 1)), (3,List(1, 2)), (3,List(2, 1)))
Обратите внимание, что последний вызов toList
существует только для запуска вычисления выражений;в противном случае результатом будет итератор, как вы просили.
Чтобы избавиться от дублирующих головок, toMap
кажется наиболее простым подходом:
Seq(1,2,3).permutations.map(p => (p.head, p.tail)).toMap
res50: scala.collection.immutable.Map[Int,Seq[Int]] = Map(1 -> List(3, 2), 2 -> List(3, 1), 3 -> List(2, 1))