如何使用谓词列表过滤集合

J-b*_*bob 3 collections filtering kotlin

我有一个元素列表,例如:

val myList = listOf(1,2,3,4,5,6,7)
Run Code Online (Sandbox Code Playgroud)

该列表可以是任何类型,这只是一个示例。现在我有一个任意长度的谓词列表:

val myPredicates = listOf({myInt: Int -> myInt > 1}, {myInt: Int -> myInt%2 == 0})
Run Code Online (Sandbox Code Playgroud)

如何通过按列表顺序应用所有谓词来过滤列表myList并在新列表中获取结果?我觉得答案就在于使用reduceorfold运算符,但答案却让我困惑。

Jof*_*rey 5

我能想到的最简单的解决方案是在调用中使用谓词列表中的所有内容filter,如下所示:

myList.filter { elt -> myPredicates.all { it(elt) } }
Run Code Online (Sandbox Code Playgroud)

myPredicates.all { it(elt) }当给定元素的所有谓词都为 true 时,该部分返回 true elt