Предположим, что у нас есть список Scala:
val l1 = List(1, 2, 3, 1, 1, 3, 2, 5, 1)
Мы можем легко удалить дубликаты, используя следующий код:
l1.distinct
или
l1.toSet.toList
Но что, если мы хотим удалить дубликаты, только если их более двух? Поэтому, если имеется более двух элементов с одинаковым значением, мы остаемся только двумя и удаляем остальные из них.
Я мог бы добиться этого с помощью следующего кода:
l1.groupBy(identity).mapValues(_.take(2)).values.toList.flatten
что дало мне результат:
List(2, 2, 5, 1, 1, 3, 3)
Элементы удаляются, но порядок остальных элементов отличается от того, как эти элементы появились в исходном списке. Как выполнить эту операцию и сохранить заказ из исходного списка?
Таким образом, результат для l1 должен быть:
List(1, 2, 3, 1, 3, 2, 5)