MST

星途 面试题库

面试题:Kotlin流式API处理复杂对象集合

定义一个Kotlin数据类Person,包含属性name(String类型)、age(Int类型)和hobbies(List<String>类型)。给定一个List<Person>,使用流式API找出年龄大于30且hobbies中包含"reading"的人的名字,并将这些名字组成一个Set<String>返回。请阐述实现过程中如何运用过滤、映射等操作。
46.3万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
  1. 定义Person数据类: 在Kotlin中,数据类是一种特殊的类,它主要用于存储数据。数据类会自动生成一些有用的方法,如equals()hashCode()toString()等。
data class Person(val name: String, val age: Int, val hobbies: List<String>)
  1. 使用流式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()
}

这里filtermaptoSet都是Kotlin集合的扩展函数,它们的功能与Java流式API中的对应操作类似。filter用于过滤元素,map用于映射元素,toSet用于将集合转换为Set