You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala实现尾递归遍历嵌套User列表,每次返回单个用户名

解决方案

首先注意:你的User类定义缺少用户名字段,要实现获取用户名的逻辑,必须补充name属性,修正后的类定义如下:

case class User(name: String, users: List[User])
val users: List[User] // 顶层用户列表

要实现“每次调用返回单个用户名,直到遍历完所有关联用户”的需求,最适合用惰性迭代器(Iterator)——它会按需递归遍历用户结构,每次调用next()返回单个用户名,而非一次性生成全部结果。

递归遍历实现

// 递归遍历单个用户及其所有嵌套好友,返回用户名迭代器
private def traverseUser(user: User): Iterator[String] = {
  // 先返回当前用户的名字,再拼接其所有好友的遍历结果
  Iterator(user.name) ++ user.users.flatMap(traverseUser)
}

// 生成包含所有顶层用户及关联用户的用户名迭代器
private val allUserNames: Iterator[String] = users.flatMap(traverseUser).iterator

使用方式

通过hasNext判断是否还有未遍历的用户名,调用next()获取单个用户名:

while (allUserNames.hasNext) {
  val singleUserName = allUserNames.next()
  // 在这里执行你的构造逻辑,比如传入其他方法处理
  println(singleUserName)
}

为什么不用List?

你之前的代码用map返回List[String],会一次性把所有用户名加载到内存中。而迭代器是惰性计算的,只有在调用next()时才会递归遍历下一个用户,更适合需要逐个处理、避免内存占用过高的场景,完全符合“每次返回单个用户名”的需求。

内容的提问来源于stack exchange,提问作者Her sincerly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 13:37:20