How to get a set of all elements that occur multiple times in a list in Scala?

后端 未结 2 539
生来不讨喜
生来不讨喜 2021-01-21 09:38

E.g. for List(1, 1, 1, 2, 3, 3, 4) it would be Set(1, 3), because 1 and 3 are the only elements which occur multiple times.

相关标签:
2条回答
  • 2021-01-21 10:03
    val s = List(1, 1, 1, 2, 3, 3, 4) // a list with non-unique elements
    (s diff s.distinct) toSet // Set(1, 3)
    
    0 讨论(0)
  • 2021-01-21 10:05

    A bit more convoluted but you can avoid having to call toSet.toList, first group the integers:

    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))
    

    Then collect only the one were the list has length greater as 1:

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

    If you want a Set just call toSet.

    0 讨论(0)
提交回复
热议问题