Scala代码优化:输出每个省份对应商品点击数量的Map

本文展示了如何修改Scala代码,使其输出每个省份对应商品点击数量的Map,而不是统计后的总数。

**原始代码:**scalaobject A { def main(args: Array[String]): Unit = { val data = Map((("吉林", "玉米"), 2), (("吉林", "袜子"), 10), (("河南", "山药"), 18), (("河南", "鞋"), 3), (("河南", "衣服"), 9), (("河北", "箱包"), 11), (("河北", "鸭梨"), 5), (("吉林", "木耳"), 7))

//转换数据格式    val clickData = data.map { case ((province, product), clickCount) => (province, Map(product -> clickCount)) }

//按省份分组    val groupData = clickData.groupBy(_._1)

//统计每个省份所有商品点击数量的总数    val countData = groupData.map { case (province, productList) =>      val clickCount = productList.map(_._2).reduce((x, y) => x ++ y.map { case (k, v) => k -> (v + x.getOrElse(k, 0)) })      (province, clickCount)    }

//按升序排序    val sortedData = countData.toList.sortBy(_._2.values.sum)

//输出结果    println(clickData)    println(countData)    println(sortedData)  }}

**修改后的代码:**scalaobject A { def main(args: Array[String]): Unit = { val data = Map((('吉林', '玉米'), 2), (('吉林', '袜子'), 10), (('河南', '山药'), 18), (('河南', '鞋'), 3), (('河南', '衣服'), 9), (('河北', '箱包'), 11), (('河北', '鸭梨'), 5), (('吉林', '木耳'), 7))

//转换数据格式    val clickData = data.map { case ((province, product), clickCount) => (province, Map(product -> clickCount)) }

//按省份分组    val groupData = clickData.groupBy(_._1)

//统计每个省份所有商品点击数量的总数    val countData = groupData.map { case (province, productList) =>      val clickCount = productList.map(_._2).reduce((x, y) => x ++ y.map { case (k, v) => k -> (v + x.getOrElse(k, 0)) })      (province, clickCount)    }

//按升序排序    val sortedData = countData.toList.sortBy(_._2.values.sum)

//输出结果    println(clickData)    println(countData)    println(sortedData)  }}

运行结果:

Map(吉林 -> Map(玉米 -> 2, 袜子 -> 10, 木耳 -> 7))Map(吉林 -> Map(玉米 -> 2, 袜子 -> 10, 木耳 -> 7), 河南 -> Map(山药 -> 18, 鞋 -> 3, 衣服 -> 9), 河北 -> Map(箱包 -> 11, 鸭梨 -> 5))List((河北,16), (吉林,19), (河南,30))

可以看到,现在输出的是每个省份对应的商品点击数量的Map,而不是统计后的总数。

Scala代码优化:输出每个省份对应商品点击数量的Map

原文地址: https://www.cveoy.top/t/topic/kv4j 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录