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

Scala中如何找出Map[String, List[Int]]的最大增长值?

Scala处理Map[String, List[Int]]找出差值最大条目解决方案

核心思路

  • 遍历Map中每个股票条目,先过滤出数据长度≥7的有效条目(避免索引越界)
  • 对每个有效条目,计算最后一个值 - 倒数第7个值的差值
  • 使用maxBy方法找出差值最大的股票ID

关键代码实现

1. 单条股票差值计算方法(可复用)

// 计算单只股票的差值,若数据长度不足7返回0(可根据需求调整为抛出异常)
def rise(values: List[Int]): Int = {
  if (values.length < 7) 0
  else values.last - values(values.length - 7)
}

// 根据股票ID查询差值
def stockRise(stocks: Map[String, List[Int]], stockId: String): Int = {
  stocks.get(stockId).map(rise).getOrElse(0)
}

2. 遍历所有股票找出差值最大的方法

def menuShowStocks(stocks: Map[String, List[Int]]): String = {
  // 先过滤出数据足够的股票,避免索引越界
  val validStocks = stocks.filter { case (_, values) => values.length >= 7 }

  validStocks match {
    case empty if empty.isEmpty => "无有效股票数据"
    case _ =>
      // 按差值排序取最大的股票ID
      validStocks.maxBy { case (_, values) => rise(values) }._1
  }
}

测试示例

// 示例数据集
val sampleStocks = Map(
  "SK1" -> List(10, 20, 30, 40, 50, 60, 70, 80),       // 差值:80-20=60
  "SK2" -> List(5, 15, 25, 35, 45, 55, 65, 75, 85),    // 差值:85-15=70
  "SK3" -> List(100, 110, 120, 130, 140, 150, 160, 200) // 差值:200-110=90
)

// 调用方法,输出SK3
println(menuShowStocks(sampleStocks))

常见问题排查

  • 索引越界异常:未过滤长度不足7的List,导致values(values.length -7)访问无效索引,必须先做长度校验
  • maxBy使用错误:若直接用stocks.maxBy(rise(_._2)),未处理无效条目会报错,需先过滤
  • 差值计算逻辑错误:注意List索引从0开始,倒数第7个元素的索引是length-7,而非length-6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:45:29