如何获取Scala中列表中多次出现的所有元素集?

时间:2014-08-16 18:22:20

标签: list scala set scala-collections

E.g。对于List(1, 1, 1, 2, 3, 3, 4),它将是Set(1, 3),因为1和3是唯一多次出现的元素。

2 个答案:

答案 0 :(得分:7)

val s = List(1, 1, 1, 2, 3, 3, 4) // a list with non-unique elements
(s diff s.distinct) toSet // Set(1, 3)

答案 1 :(得分:5)

有点复杂,但你可以避免必须调用toSet.toList,首先对整数进行分组:

scala> s.groupBy(identity)
res13: scala.collection.immutable.Map[Int,List[Int]] = 
  Map(2 -> List(2), 4 -> List(4), 1 -> List(1, 1, 1), 3 -> List(3, 3))

然后只收集列表长度大于1的那个:

scala> s.groupBy(identity).collect { case (v, l) if l.length > 1 => v }
res17: scala.collection.immutable.Iterable[Int] = List(1, 3)

如果您想要Set,只需致电toSet