我正在尝试对 List<Object>
进行分组其中包含
Exercice, type, User, passed, ..
还有更多,但这些是最重要的,问题是我得到了一个很长的列表,所以我想将其分组:
Type, User, NumberOfPassed, NumberOfFaileds
例如我有:
Exercice1, hand, Hans@gmail.com, true
Exercice2, hand, Hans@gmail.com, false
Exercice3, hand, Hans@gmail.com, false
Exercice4, hand, Hans@gmail.com, false
Exercice2, hand, Thiago@gmail.com, true
Exercice1, hand, Thiago@gmail.com, true
输出应该是
Hand, Hans@gmail.com, 1/4
Hand, Thiago@gmail.com, 2/2
最佳答案
鉴于您的数据类如下所示:
data class UserData(
val exercise: String,
val type: String,
val emailAddress: String,
val passed: Boolean
)
您可以先按type
分组和emailAddress
使用Pair
作为结果 map 的关键:
val groupingMap = l.groupBy{ it.type to it.emailAddress }
groupingMap
类型为:Map<Pair<String, String>, List<UserData>>
之后,您可以使用 forEach
迭代该 map 。像这样:
resultMap.forEach { (groupKey, list) ->
val numElements = list.count()
val numTrueElements = list.count { it.passed }
val (type, emailAddress) = groupKey
println("$type, $emailAddress, $numTrueElements/$numElements")
}
结果:
hand, Hans@gmail.com, 1/4
hand, Thiago@gmail.com, 2/2
可能有更适合 type
的类型甚至可能exercise
(这取决于用例)但为了这个例子,我选择了 String
.
关于java - 如何通过某些属性将 List<Object> 分组到另一个 List<Object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55893129/