嵌套列表kotlin中的谓词



我有一个JSON列表,其中我需要根据一些过滤器过滤数据。我使用谓词进行过滤,但根据我的需要,我需要过滤嵌套列表,如果在这里使用谓词,我只剩下3个测试谓词,即Any, None, and All,但因为我只想要匹配的数据,并且我不使用这些谓词中的任何一个。

如果至少有一个匹配元素,Any返回true,如果有所有匹配元素,则All返回true,但我如何才能从嵌套列表中仅获得匹配元素,而不考虑任何不匹配元素。

我可以使用循环列表的传统方法,但我想知道是否可以使用谓词。

以下是示例JSON我正在尝试获取会话元素包含min_age_limit is > 18available_dose_1 > 0的中心。

{
"centers": [
{
....
"sessions": [
{
"session_id":"adad",
...
"min_age_limit":45,
"available_capacity_dose1": 5,
"available_capacity_dose2": 5
...
},
{
"session_id":"adad1",
...
"min_age_limit":18,
"available_capacity_dose1": 0,
"available_capacity_dose2": 5
...
},
{
"session_id":"adad2",
...
"min_age_limit":18,
"available_capacity_dose1": 5,
"available_capacity_dose2": 0
...
}
]
}
....
]
}

您应该使用过滤器,如下所示。

filteredList = sessions.filter{ it.min_age_limit > 18 && it.available_dose_1 > 0 } 

为了澄清,Kotlin支持any、none和all的奖金谓词。但过滤器也在那里。我想这就是你想要的。

不可能使用谓词。我将列表转换为地图,然后添加了过滤器。

val allValidSessions = it?.data?.centers?.sortedBy { it.name }?.map { center ->
center to center.sessions?.filter { session -> isValidSession(session, 18, selectedDose) }
}?.toMap()
private fun isValidSession(session: Session, s: String, selectedDose: String): Boolean {
if (session.minAgeLimit!! == s.toInt() && (if (selectedDose == "1") session.availableCapacityDose1!! > 0 else session.availableCapacityDose2!! > 0)) return true
return false
}

最新更新