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

Scala列表处理报错:无法获取每行rr元素,求代码修正方案

解决Scala代码中无法访问"rr"元素的问题

看起来你的代码有两个核心问题:一是访问第四个元素("rr")时的语法错误,二是没有正确处理结果格式以匹配你期望的输出。我来帮你修正并解释清楚:

原代码的问题点

  1. 语法错误:e._2.map(._3) 这里缺少下划线,正确写法应该是 _.apply(3) 或者 _(3),但即使修正这个,你会得到每个分组的"rr"列表(比如banana对应的List("rr", "rr")),这并不是你想要的单个"rr"值。
  2. 结果格式不匹配:你需要将分组统计后的结果拼接成空格分隔的字符串,而不是保留元组或列表形式。

修正后的代码

val listInput = List("banana 10 10 rr", "apple 20 10 rr", "apple 30 10 rr", "banana 10 10 rr", "berry 10 10 rr")

val result = listInput
  .map(_.split("\\s+")) // 将每行按空白字符分割成字符串数组
  .groupBy(_(0)) // 按水果名称(数组第一个元素)分组
  .map { case (fruit, entries) =>
    // 计算数组第二个元素的总和
    val totalNum1 = entries.map(_(1).toInt).sum
    // 计算数组第三个元素的总和
    val totalNum2 = entries.map(_(2).toInt).sum
    // 获取分组内第一个条目的第四个元素(所有条目都是"rr",取第一个即可)
    val tag = entries.head(3)
    // 拼接成目标格式的字符串
    s"$fruit $totalNum1 $totalNum2 $tag"
  }
  .toList // 转换为List类型,匹配期望输出

关键细节说明

  • 数组元素访问:用_(index)替代apply(index)更简洁,比如_(0)就是数组的第一个元素。
  • 处理"rr"元素:因为每个分组内的所有条目的第四个元素都是"rr",直接取分组中第一个条目的(3)索引值即可,不需要遍历所有条目,既简洁又高效。
  • 字符串拼接:使用Scala的字符串插值s"..."可以轻松将变量拼接成目标格式的字符串。
  • 转换为List:最后调用toList将Map的值转换为List,完全匹配你期望的输出格式。

运行这段代码后,result的值就是你想要的:

List("banana 20 20 rr", "apple 50 20 rr", "berry 10 10 rr")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:26:46