Android 嵌套列表kotlin中的谓词
我有一个JSON列表,其中我需要根据一些过滤器过滤数据。 我使用谓词进行过滤,但根据我的需要,我需要过滤嵌套列表,如果我在这里使用谓词,我将剩下3个测试谓词,它们是Android 嵌套列表kotlin中的谓词,android,kotlin,predicate,Android,Kotlin,Predicate,我有一个JSON列表,其中我需要根据一些过滤器过滤数据。 我使用谓词进行过滤,但根据我的需要,我需要过滤嵌套列表,如果我在这里使用谓词,我将剩下3个测试谓词,它们是Any、None和All,但因为我只需要匹配的数据,而没有使用这些谓词 AsAny如果至少有一个匹配元素,则返回true;All如果有所有匹配元素,则返回true,但是如何从嵌套列表中仅获取匹配的元素,而不考虑任何不匹配的元素 我可以使用循环列表的传统方法,但我想知道是否可以使用谓词 下面是示例JSON 我正在尝试获取其会话元素包含m
Any、None和All
,但因为我只需要匹配的数据,而没有使用这些谓词
AsAny
如果至少有一个匹配元素,则返回true;All
如果有所有匹配元素,则返回true,但是如何从嵌套列表中仅获取匹配的元素,而不考虑任何不匹配的元素
我可以使用循环列表的传统方法,但我想知道是否可以使用谓词
下面是示例JSON
我正在尝试获取其会话元素包含min\u age\u limit>18和available\u dose\u 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
}
感谢您的回复,但是JSON包含每个中心的会话,在这种情况下,我是否需要首先循环通过中心并向会话添加筛选器?。请纠正我<代码>中心?.forEach{center->center.sessions?.filter{session->session.minAgeLimit>18&&session.availableCapacityDose1>0}