在单个列表 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" }
ApiResponse
"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()
在单个列表中查找三个项目的最佳方法是什么。我尝试了一些代码并且工作正常。我想知道有没有更好的方法来提高效率、内存管理或任何好的方法。
val completeEvent = events?.lastOrNull { events -> events.status == "complete" }
val activeEvent = events?.find { events -> events.status == "active" }
val futureEvent = events?.firstOrNull { events -> events.status == "future" }
ApiResponse
"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()