多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### any和all函数 接下来我们继续学习两个比较常用的函数式API——**any和all函数。其中any函数用于判断集合中是否至少存在一个元素满足指定条件,all函数用于判断集合中是否所有元素都满足指定条件**。由于这两个函数都很好理解,我们就直接通过代码示例学习了: ~~~ fun main() { val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon") val anyResult = list.any { it.length <= 5 } val allResult = list.all { it.length <= 5 } println("anyResult is " + anyResult + ", allResult is " + allResult) } ~~~ 这里还是在Lambda表达式中将条件设置为5个字母以内的单词,那么any函数就表示集合中是否存在5个字母以内的单词,而all函数就表示集合中是否所有单词都在5个字母以内。现在重新运行一下代码,结果如图2.28所示。 ![图像说明文字](http://epub.ituring.com.cn/api/storage/getbykey/screenshow?key=2003d0c2ecb89ddd9d07) 这样我们就将Lambda表达式的语法结构和几个常用的函数式API的用法都学习完了,虽然集合中还有许多其他函数式API,但是只要掌握了基本的语法规则,其他函数式API的用法只要看一看文档就能掌握了,相信这对你来说并不是难事。 ### “count ”和“ find ” 上一小节讲解中,我们也涉及到了count的用法,这里简单叙述一下 count 函数检查有多少元素满足判断式, 而find 函数返回第一个符合条件的元素。 ``` data class Person(val name: String, val age: Int) val canBeInClub27 = { p: Person -> p.age <= 27 } fun main(args: Array<String>) { val people = listOf(Person("Alice", 27), Person("Bob", 31)) println(people.count(canBeInClub27))//1 println(people.find(canBeInClub27)) } ``` 如果你想知道有多少个元素满足了判断式, 使用count : ``` println(people.count(canBeInClub27))//1 ``` >[success]**使用正确的函数完成工作**:“count ” vs.“size” count 方法容易被遗忘,然后通过过滤集合之后再取大小来实现它: ` println(people.count(canBeInClub27))//1` 在这种情况下,一个中间集合会被创建并用来存储所有满足判断式的元素。而另一方面,count方法只是跟踪匹配元素的数量,不关心元素本身,所以更高效。 一般的规则是, 尝试找到适合你需求的最合适的操作。 要找到一个满足判断式的元素,使用find 函数 ``` println(people.find(canBeInClub27))//Person(name=Alice, age=27) ``` 如果有多个匹配的元素就返回其中第一个元素或者返回null , 如果没有一个元素能满足判断式。find 还有一个同义方法firstOrNull ,可以使用这个方法更清楚地表述你的意图。