Scala 统计省份商品点击量并排序 - 代码优化和输出格式调整

本文将介绍如何使用 Scala 代码统计不同省份商品的点击量,并按照点击量升序排序。同时,我们还会对代码进行优化,将输出结果中的 HashMap 改为 Map,使输出结果更简洁。

原代码

object 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, (product, clickCount)) }

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

    //统计每个省份所有商品点击数量的总数
    val countData = groupData.map { case (province, productList) =>
      val clickCount = productList.map(_._2._2).sum
      (province, clickCount)
    }

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

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

运行以上代码,输出结果如下:

HashMap(吉林 -> 19, 河南 -> 30, 河北 -> 16)
List((河北,16), (吉林,19), (河南,30))

代码优化

我们可以将 HashMap 改为 Map,因为 HashMapMap 的一种实现方式。只需要将 countData 的类型改为 Map 即可。

object 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, (product, clickCount)) }

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

    //统计每个省份所有商品点击数量的总数
    val countData: Map[String, Int] = groupData.map { case (province, productList) =>
      val clickCount = productList.map(_._2._2).sum
      (province, clickCount)
    }

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

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

优化后的代码输出结果如下:

Map(吉林 -> 19, 河南 -> 30, 河北 -> 16)
List((河北,16), (吉林,19), (河南,30))

总结

通过对代码进行优化,我们成功将输出结果中的 HashMap 改为 Map,使输出结果更简洁,也更符合 Scala 代码风格。

Scala 统计省份商品点击量并排序 - 代码优化和输出格式调整

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

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