嵌套列表 kotlin 中的谓词
Predicates in nested list kotlin
我有一个 JSON 列表,我需要根据一些过滤器在其中过滤数据。
我正在使用谓词进行过滤,但根据我的需要,我需要过滤嵌套列表,如果我在这里使用谓词,我将剩下 3 个测试谓词,即 Any, None, and All
但因为我只想要匹配的数据,而我是没有使用任何这些谓词。
As Any
returns 如果至少有一个匹配元素则为真,并且 All
returns 如果有所有匹配元素则为真但是我怎样才能只得到嵌套列表中的匹配元素,不考虑任何非匹配元素。
我可以使用遍历列表的传统方法,但我想知道是否可以使用谓词。
这是示例 JSON
我正在尝试获取会话元素包含 min_age_limit is > 18
和 available_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
...
}
]
}
....
]
}
您应该像下面这样使用 filter。
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 列表,我需要根据一些过滤器在其中过滤数据。
我正在使用谓词进行过滤,但根据我的需要,我需要过滤嵌套列表,如果我在这里使用谓词,我将剩下 3 个测试谓词,即 Any, None, and All
但因为我只想要匹配的数据,而我是没有使用任何这些谓词。
As Any
returns 如果至少有一个匹配元素则为真,并且 All
returns 如果有所有匹配元素则为真但是我怎样才能只得到嵌套列表中的匹配元素,不考虑任何非匹配元素。
我可以使用遍历列表的传统方法,但我想知道是否可以使用谓词。
这是示例 JSON
我正在尝试获取会话元素包含 min_age_limit is > 18
和 available_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
...
}
]
}
....
]
}
您应该像下面这样使用 filter。
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
}