在单个列表 kotlin 中查找多个项目的最佳方法

Best way to find multiple items in single list kotlin

在单个列表中查找三个项目的最佳方法是什么。我尝试了一些代码并且工作正常。我想知道有没有更好的方法来提高效率、内存管理或任何好的方法。

val completeEvent = events?.lastOrNull { events -> events.status == "complete" }
val activeEvent = events?.find { events -> events.status == "active" }
val futureEvent = events?.firstOrNull { events -> events.status == "future" }

A​​piResponse

"Events": [{
            "title": "Test 1",
            "status": "complete"
        }, {
            "title": "Test 2",
            "status": "complete"
        }, {
            "title": "Test 3",
            "status": "complete",
        }, {
            "title": "Test 4",
            "status": "complete"
        }, {
            "title": "Test 5",
            "status": "complete"
        }, {
            "title": "Test 6",
            "status": "active"
        }, {
            "title": "Test 7",
            "status": "future"
        }, {
            "title": "Test 8",
            "status": "future"
        }]

您的原始代码对列表执行 3 次迭代。您可以使用单次迭代来完成 - 首先您按状态对事件进行分组,然后根据状态从该地图中获取(first/last)事件:

val eventsGroupped = events?.groupBy { it.status }  // Map<String, List<Event>>

val completeEvent = eventsGroupped?.get("complete")?.lastOrNull()
val activeEvent = eventsGroupped?.get("active")?.firstOrNull()
val futureEvent = eventsGroupped?.get("future")?.firstOrNull()