java - 如何在 Scala 中优雅地处理多个异常引发语句

标签 java scala design-patterns functional-programming

我正在通过从杂乱的 csv 数据中的非结构化文本行中提取 30-40 个键来构建 map 结构。我在这个困惑的数据行上使用正则表达式进行提取,很多时候这些值不存在,因此会生成异常,

我将这 40-50 个语句放入 try 和 catch block 中,并且能够解析,但问题是生成了一个异常,其他语句将不会被提取,因此我开始将每个注释放入 try catch block 中。

try{
statment: 1
statment:2
.
.
.statement 30
}

如何在 scala 中优雅地处理此类场景,以捕获每个语句中的异常并继续构建映射结构,而无需将每个语句放入单独的 try catch block 中。

try{
stat1
}

try{
stat2
}
....

实际代码:-

var mp = scala.collection.immutable.Map[String, Any]()
try{

// working on json payload
var jsonpayloadstr=  cleanstr.split("\"\\{\"")(1).split(",\"\\[")(0).split("\\}\",")(0).toString
jsonpayloadstr ="{\""+jsonpayloadstr +"}"


var jobj=scala.util.parsing.json.JSON.parseFull(jsonpayloadstr)

var bdmap=jobj.get.asInstanceOf[Map[String, Map[String, Any]]]("Boundary")
bdmap.map(x=>mp=mp+(x._1->x._2))

//batterystatus

var batterystatus= jobj.get.asInstanceOf[Map[String, Map[String, Map[String,Double]]]]("Notification")("Data")("BatteryStatus")
mp=mp+("BatteryStatus"->batterystatus.toInt)

var locationMap= jobj.get.asInstanceOf[Map[String, Map[String, Map[String,Map[String,Any]]]]]("Notification")("Data")("Location")
locationMap.map(x=>mp=mp+(x._1->x._2))

//tagid
var tagId= jobj.get.asInstanceOf[Map[String, Map[String, Map[String,Any]]]]("Notification")("Data")("TagID")
mp=mp+("TagID"-> tagId)

//brechID
var isBreached=jobj.get.asInstanceOf[Map[String, Map[String, Map[String,List[Map[String,Any]]]]]]("Notification")("Data")("SensorData")(0)("IsBreached")
mp=mp+("IsBreached"-> isBreached)
}
catch{
case e: Exception => {
println("Oops none get 123455dsdsd677")
}
}

谢谢

最佳答案

如果您想继续解析其他变量,即使其中一个变量失败,您可以执行以下操作:

val batterystatus = Try(...).toOption

val locationMap = Try(...).toOption

...

这样,您将获得正确解析的所有内容的值,并且您将被迫考虑如何处理未正确解析的内容。

关于java - 如何在 Scala 中优雅地处理多个异常引发语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49378831/

相关文章:

java - 有没有办法用 SQL Server JDBC 驱动程序显示 PRINT 结果?

具有独特字符串的 JavaFX TreeView

Scala BigDecimal 如何显示更多小数?

scala - 为特定成员类型扩展scala集合

java - 调度程序 View 模式和 MVC

c++ - 前摄器 VS react 器

javascript - AngularJS 设计模式 : Should I use factories to create constructor functions?

java - SQL错误:java.io.IOException:java.lang.IllegalArgumentException:bucketId超出范围:-1

java - 我的编译器无法读取某些类

scala - sparkSession.sparkContext对于本地Spark集群为null