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

Scala 如何统计存储地区人口信息的Map中蓝眼睛占比最高的地区

Scala 蓝眼睛占比最高地区计算方案

前置说明

你持有的数据结构为Map[String, Seq[Person]],Scala中访问样例类(case class)的属性直接使用.属性名即可,无需通过元组下标_._2的方式取值。

实现代码

依赖前提

假设你的Person类定义为样例类(常规业务场景下的定义方式):

case class Person(region: String, hair: String, eyes: String)

如果是普通Java类,只需将下方代码中的_.eyes替换为_.getEyes()即可。

完整计算逻辑

// 替换为你实际持有的地区-人群Map变量
val regionPersonMap: Map[String, Seq[Person]] = ???

// 计算每个地区的蓝眼睛人口占比,自动过滤无人地区避免除零异常
val regionRatioMap = regionPersonMap
  .filter(_._2.nonEmpty)
  .map { case (regionName, personList) =>
    // 直接通过.eyes访问Person的眼睛颜色属性统计蓝眼人数
    val blueEyeCnt = personList.count(_.eyes == "blue")
    // 转Double避免整数除法丢失精度
    val blueEyeRatio = blueEyeCnt.toDouble / personList.size
    (regionName, blueEyeRatio)
  }

// 获取占比最高的地区,返回Option兼容空输入场景
val highestBlueEyeRegion = regionRatioMap.maxByOption(_._2).map(_._1)

// 如果你确定输入Map永远不为空,也可以直接取结果不处理空场景
// val highestBlueEyeRegion = regionRatioMap.maxBy(_._2)._1

逻辑说明

  • 过滤空人群地区是为了避免除以零的运行时异常,可根据你的业务场景决定是否保留
  • personList.count(_.eyes == "blue")是该需求下的正确统计写法,直接访问Person实例的eyes属性做匹配统计
  • 最终返回的highestBlueEyeRegion为Option[String]类型,如果所有地区都没有人口会返回None,可根据业务需要做默认值处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:45:06