Scala建模:对象、样例类与ListMap的函数返回类型定义问题
调整Scala函数返回类型为ListMap[String, String]的实现方案
没问题,我来帮你一步步调整这个实现,把原来的样例类返回改成更通用的ListMap格式~
1. 先修改函数的返回类型
首先把getMovieInformation的返回类型从自定义的Information样例类改成ListMap[String, String],记得导入Scala的ListMap类(它属于不可变集合,能严格保持键值对的插入顺序,很适合需要按固定逻辑展示信息的场景)。修改后的函数签名如下:
import scala.collection.immutable.ListMap def getMovieInformation(name: String): ListMap[String, String] = ???
2. 把内部API的高级结果转成易懂的键值对
核心步骤就是将内部API返回的“用户看不懂的复杂数据”,映射成普通人能理解的键值对。举个具体的例子,假设内部API返回的是一个结构复杂的AdvancedMovieData类型,我们可以这样处理:
// 假设内部API返回的高级数据结构(仅作示例) case class AdvancedMovieData( rawTitle: String, showStatus: Int, // 比如0=下映,1=在映 releaseUnixTime: Long, ratingDetails: Map[String, Double], // 包含"critic_score" "user_score"等字段 crewInfo: List[Map[String, String]] // 每个成员有"role" "real_name"等字段 ) def getMovieInformation(name: String): ListMap[String, String] = { // 调用内部API获取高级结果 val advancedData = internalMovieApi.fetchAdvancedInfo(name) // 把复杂数据转换为用户易懂的键值对,插入顺序会被ListMap保留 ListMap( "电影名称" -> advancedData.rawTitle, "是否在映" -> (if (advancedData.showStatus == 1) "是" else "否"), "上映日期" -> java.time.Instant.ofEpochMilli(advancedData.releaseUnixTime) .atZone(java.time.ZoneId.systemDefault()) .toLocalDate.toString, "观众评分" -> advancedData.ratingDetails.getOrElse("user_score", 0.0).toString, "核心主创" -> advancedData.crewInfo .filter(member => member("role") == "director" || member("role") == "lead_actor") .map(_("real_name")) .mkString(", ") ) }
3. 处理可选字段的小技巧
如果内部API的某些字段是可选的(比如可能没有导演信息),可以用Option动态添加键值对,避免出现空值或无效信息:
def getMovieInformation(name: String): ListMap[String, String] = { val advancedData = internalMovieApi.fetchAdvancedInfo(name) // 先构建必选的基础键值对 val baseMap = ListMap( "电影名称" -> advancedData.rawTitle, "是否在映" -> (if (advancedData.showStatus == 1) "是" else "否") ) // 收集可选字段,仅当字段存在时才加入 val optionalFields = List( advancedData.ratingDetails.get("critic_score").map("专业评分" -> _.toString), advancedData.crewInfo.find(_("role") == "director").map("导演" -> _("real_name")) ).flatten // 合并基础map和可选字段 baseMap ++ ListMap.from(optionalFields) }
这样调整后,你的函数就能返回通用、易懂的键值对集合,而且ListMap能保证信息的展示顺序和你定义的逻辑一致,用户体验会更顺畅~
内容的提问来源于stack exchange,提问作者o-0
相关产品推荐
相关产品推荐

