v_d123
v_d123

Reputation: 27

How to separate similar tuples based on some similar attribute?

I have a tuple list which looks like this:

val days= List(("Sunday", 1), ("Monday", 2), ("Tuesday", 1),
        ("Wednesday", 2), ("Thursday", 3), ("Friday", 2),
        ("Saturday", 3))

I want the final result to look like this:

"data": [
  [
    "Sunday, 1",
    "Tuesday, 1"
  ],
  [
    "Monday, 2",
    "Friday, 2"
    "Wednesday,2"
  ],
  [
    "Thursday, 3",
    "Saturday,3"
  ]
]

Upvotes: 1

Views: 41

Answers (1)

Andronicus
Andronicus

Reputation: 26046

You can group and then map values:

days.groupBy(_._2)
    .mapValues(_.map { case (name, nr) => s"$name, $nr" } )
    .valuesIterator.toList

The result is:

 List(List(Monday, 2, Wednesday, 2, Friday, 2), List(Sunday, 1, Tuesday, 1), List(Thursday, 3, Saturday, 3))

P.S.: As Luis Miguel Mejía Suárez suggests, using groupMap (from scala 2.13) can make this a bit more concise and readable:

days.groupMap(_._2) { case (name, nr) => s"$name, $nr" }
    .valuesIterator.toList

Upvotes: 3

Related Questions