Введение
Разработка в основном основана на scala, некоторые общие компоненты инструмента записываются и время от времени постоянно обновляются...
2. Компоненты ежедневного инструмента
1. Повторяющиеся символы
Используется при печати нормализованных журналов для указанного количества символов.
def repeatString(char: String, n: Int): String = List.fill(n)(char).mkString
использовать:
println(repeatString("=", 100))
====================================================================================================
2. Форматировать числа
Для представления и отображения данных двойная спецификация имеет формат знака процента и десятичной точки 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.Редис Хмсет
При использовании 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. Прокрутите даты
Для выполнения задачи нужно одновременно обработать несколько дней данных и получить результаты.Можно сначала получить все dts в коде, а потом отдельно обрабатывать финальную сводку.
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, и его нужно постоянно дописывать, это легко решается с помощью 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 очень сложен в написании. Для некоторых простых сценариев, таких как получение и преобразование функций, он не должен быть таким сложным. Просто представьте scala.util.Попробуйте быстро попробовать catch.
def tryCatch(): Unit = {
val numStr = "NULL"
val num = try {
numStr.toInt
} catch {
case e: Exception => {
e.printStackTrace()
0L
}
}
println(num)
Быстрая попытка поймать:
val quickNum = Try(numStr.toInt).getOrElse(0)
println(quickNum)