面试题答案
一键面试- 定义
Person
数据类: 在Kotlin中,数据类是一种特殊的类,它主要用于存储数据。数据类会自动生成一些有用的方法,如equals()
、hashCode()
、toString()
等。
data class Person(val name: String, val age: Int, val hobbies: List<String>)
- 使用流式API进行过滤和映射操作:
- 过滤操作:我们使用
filter
方法来筛选出年龄大于30且hobbies
中包含"reading"
的Person
对象。 - 映射操作:使用
map
方法将符合条件的Person
对象映射为其name
属性。 - 最后,使用
toSet
方法将结果转换为Set<String>
。
- 过滤操作:我们使用
fun findNames(persons: List<Person>): Set<String> {
return persons.stream()
.filter { person -> person.age > 30 && person.hobbies.contains("reading") }
.map { person -> person.name }
.collect(Collectors.toSet())
}
上述代码首先通过stream
方法将List<Person>
转换为流,然后使用filter
方法过滤出符合条件的Person
对象,接着使用map
方法提取出他们的名字,最后通过collect(Collectors.toSet())
将结果收集为Set<String>
。
在Kotlin中,也可以使用Kotlin的集合扩展函数来实现相同的功能,代码如下:
fun findNames(persons: List<Person>): Set<String> {
return persons.filter { it.age > 30 && it.hobbies.contains("reading") }
.map { it.name }
.toSet()
}
这里filter
、map
和toSet
都是Kotlin集合的扩展函数,它们的功能与Java流式API中的对应操作类似。filter
用于过滤元素,map
用于映射元素,toSet
用于将集合转换为Set
。