is there any functional operator that helps me ach...
# getting-started
l
is there any functional operator that helps me achieve this?
Copy code
val listOfLists = listOf(
     Data(1, listOf("A")),
     Data(2, listOf("B")),
     Data(1, listOf("B")),
     Data(2, listOf("C"))
  )
   output:  [ Data(1,listOf("A","B")) , Data(2,listOf("B","C"))]
c
something like this maybe 🙂
Copy code
data class Data(
    val number: Int,
    val strings: List<String>
)
val listOfLists = listOf(
    Data(1, listOf("A")),
    Data(2, listOf("B")),
    Data(1, listOf("B")),
    Data(2, listOf("C"))
)
val calculated = listOfLists.groupBy { it.number }.map { entry ->
    Data(entry.key, entry.value.map { it.strings }.flatten())
}
println(calculated) // [Data(number=1, strings=[A, B]), Data(number=2, strings=[B, C])]
👍 2
l
Copy code
listOfLists
    .groupingBy { it.key }
    .aggregate {i,r: Data?, el, _ ->
        Data(i, (r?.strings ?: listOf<String>()) + el.strings )
    }
    .values
pretty similar 🙂
l
oh nice didn’t know about groupingBy
I was trying with groupBy then some kind of flatMap
but I couldn’t wrap my head around it
thanks guys it worked and learned two more functional operators 😄
👍🏻 1