Scala - 日常工具组件

一.引言

开发以 scala 为主,记录一些常见工具组件,不定时持续更新...

二.日常工具组件

1.重复字符

打印标准化日志时使用,用于指定数量的字符。

  def repeatString(char: String, n: Int): String = List.fill(n)(char).mkString

使用:

    println(repeatString("=", 100))
====================================================================================================

2.格式化数字

用于数据报告与展示,将 double 规范为百分号取小数点x位格式。

import java.text.DecimalFormat
  
  def formatRatio(ratio: Double): String = {
    val decimalFormatter = new DecimalFormat("0.000%")
    val formatted_num = decimalFormatter.format(ratio)
    formatted_num
  }

使用:

    val num = 0.034879347834726
    val forMatNum = formatRatio(num)
    println(forMatNum)
3.488%

3.Redis Hmset

使用 Jedis 执行 redis.hmset 时,发现 scala.collection.mutable.HashMap[String, String]  和 java.util.Map[String, String] 均不可用,切换 java.uitl.HashMap 正常使用。

      val map = new util.HashMap[String, String]()
      redis.hmset(saveKey, map)
  def toLog(args: String*): String = {
    args.toArray.mkString("\t")
  }

4.遍历日期

执行任务需要同时处理多天数据并出结果,可以在代码中先获取所有 dt,再分别处理最后汇总。

  def traverseDate(): Unit = {
    val dateTimeFormat = DateTimeFormatter.ofPattern("yyyyMMdd")

    val st = "20210101"
    val end = "20210315"
    var now = st
    val allDateTime = new ArrayBuffer[String]()

    while (now.toInt <= end.toInt) {
      allDateTime.append(now)
      now = LocalDate.parse(now, dateTimeFormat).plusDays(1).format(dateTimeFormat)
    }

    allDateTime.foreach(println)
  }

5.不定长日志

任务输出日志时,经常遇到不定长的情况,使用 StringBuilder 或者 StringBuffer 都比较麻烦,需要一直 append,使用 scala 变长参数可以轻松解决,非常的好用。

  def toLog(args: String*): String = {
    args.toArray.mkString("\t")
  }
    println(toLog("A", "B", "C", "D"))
    println(toLog("A", "B", "C", "D", "E", "F"))

6.快捷 Try Catch

scala 传统 try catch 写起来十分复杂,对于一些简单的场景例如特征获取与转化时无需如此复杂,只需引入 scala.util.Try 即可快速 try catch。

  def tryCatch(): Unit = {
    val numStr = "NULL"

    val num = try {
      numStr.toInt
    } catch {
      case e: Exception => {
        e.printStackTrace()
        0L
      }
    }
    println(num)

快速 try-catch:

   val quickNum = Try(numStr.toInt).getOrElse(0)
   println(quickNum)

猜你喜欢

转载自blog.csdn.net/BIT_666/article/details/124099853
今日推荐