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
相关产品推荐
相关产品推荐

