JP
03/14/2020, 12:43 PMfun List<User>.aggregate(): List<User> {
val result = this
.groupingBy { it.login } // Grouping<User, String>
.aggregate { key: String, accumulator: User?, element: User, first: Boolean
->
if (first) element
else User(
accumulator!!.login,
accumulator!!.contributions + element.contributions
)
}
return result.values.toList()
}
result
’s type becomes Map<String, User?>
, while I was expecting it to be Map<String, User>
?Jakub Pi
03/14/2020, 2:36 PMval numbers = listOf(3, 4, 5, 6, 7, 8, 9)
val aggregated : Map<Int, StringBuilder> = numbers.groupingBy { it % 3 }.aggregate { key, accumulator: StringBuilder?, element, first ->
if (first) // first element
StringBuilder().append(key).append(":").append(element)
else
accumulator!!.append("-").append(element)
}
Above code fails at runtime unless the type of aggregated is set to Map<Int, StringBuilder*?*>
Looks like a bug to me.Jakub Pi
03/14/2020, 2:42 PMJakub Pi
03/14/2020, 3:25 PMJakub Pi
03/14/2020, 3:34 PMfun List<User>.aggregate(): List<User> {
val result = this
.groupingBy { it.login } // Grouping<User, String>
.aggregate<User, String, User> { key: String, accumulator: User?, element: User, first: Boolean
->
if (first) element
else User(
accumulator!!.login,
accumulator!!.contributions + element.contributions
)
}
return result.values.toList()
}
JP
03/14/2020, 3:46 PM