java - 如何通过某些属性将 List<Object> 分组到另一个 List<Object>

标签 java android kotlin

我正在尝试对 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/

相关文章:

java - SonarQube:仅有条件地调用方法

android - 如何在 Android 上使用 Apache HttpClient 查看完整的 HttpPost 请求

java - 如何将此Kotlin代码中的 “apply”转换为Java?

android - Broadcast Receiver 只接收一次信息

android - 以编程方式单击主页按钮并在 flutter 中关闭屏幕

kotlin - Kotlin 有 'trait' 类型吗?

java - 将 Java 1.5 重写为 1.4

java - 通过 Tomcat NIO 和 Sendfile 下载大文件的问题

java - 无法获取 org.hibernate.persister.entity.SingleTableEntityPersister 错误的构造函数

java - Android:SimpleDateFormat 在多个 fragment 中打印重复项