Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 嵌套列表kotlin中的谓词_Android_Kotlin_Predicate - Fatal编程技术网

Android 嵌套列表kotlin中的谓词

Android 嵌套列表kotlin中的谓词,android,kotlin,predicate,Android,Kotlin,Predicate,我有一个JSON列表,其中我需要根据一些过滤器过滤数据。 我使用谓词进行过滤,但根据我的需要,我需要过滤嵌套列表,如果我在这里使用谓词,我将剩下3个测试谓词,它们是Any、None和All,但因为我只需要匹配的数据,而没有使用这些谓词 AsAny如果至少有一个匹配元素,则返回true;All如果有所有匹配元素,则返回true,但是如何从嵌套列表中仅获取匹配的元素,而不考虑任何不匹配的元素 我可以使用循环列表的传统方法,但我想知道是否可以使用谓词 下面是示例JSON 我正在尝试获取其会话元素包含m

我有一个JSON列表,其中我需要根据一些过滤器过滤数据。 我使用谓词进行过滤,但根据我的需要,我需要过滤嵌套列表,如果我在这里使用谓词,我将剩下3个测试谓词,它们是
Any、None和All
,但因为我只需要匹配的数据,而没有使用这些谓词

As
Any
如果至少有一个匹配元素,则返回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}