Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Scala中优雅地处理多个引发异常的语句_Java_Scala_Design Patterns_Functional Programming - Fatal编程技术网

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

Java 如何在Scala中优雅地处理多个引发异常的语句,java,scala,design-patterns,functional-programming,Java,Scala,Design Patterns,Functional Programming,我通过从杂乱的csv数据中提取非结构化文本行中的30-40个键来构建地图结构。我在这个混乱的数据行上使用正则表达式进行提取,很多时候这些值都不存在,所以它会生成异常 我将这些40-50条语句放在try,catch块中,并能够进行解析,但问题是生成了一个异常,其他语句将不会被提取,所以我开始将每个注释放在try,catch块中 try{ statment: 1 statment:2 . . .statement 30 } 如何在scala中优雅地处理这样的场景,以捕获每条语句中的异常,并继续构建

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

我将这些40-50条语句放在try,catch块中,并能够进行解析,但问题是生成了一个异常,其他语句将不会被提取,所以我开始将每个注释放在try,catch块中

try{
statment: 1
statment:2
.
.
.statement 30
}
如何在scala中优雅地处理这样的场景,以捕获每条语句中的异常,并继续构建映射结构,而不将每条语句放在单独的try-catch块中

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

...

这样,您将拥有正确解析的所有变量的值,并且您将被迫考虑如何处理未正确解析的变量。

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

val batterystatus = Try(...).toOption

val locationMap = Try(...).toOption

...

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

我从reddit scala论坛了解到一种新方法:-


我们不应该使用基于异常的提取。将正则表达式放入列表中,并使用相应的提取函数映射列表,类似于regex=>Option[element],然后将列表展平。

我从reddit scala论坛了解到一种新方法:-


我们不应该使用基于异常的提取。将正则表达式放入一个列表中,并使用相应的提取函数映射该列表,例如regex=>Option[element],然后将列表展平。

您能提供一个输入、异常和输出的示例吗?这将有助于我们给出适当的选项。如果您添加了一些关于在
stat1
stat2
等中实际发生的事情的代码,那么就更容易理解您的问题了(其中一个应该足够了,听起来好像它们非常相似)?一些一般建议:尽可能使用
val
而不是
var
。与标准库中的JSON框架相比,还有其他更适合使用的JSON框架,例如circe或Play JSON您能提供一个输入、异常和输出的示例吗?这将有助于我们给出适当的选项。如果您添加了一些关于在
stat1
stat2
等中实际发生的事情的代码,那么就更容易理解您的问题了(其中一个应该足够了,听起来好像它们非常相似)?一些一般建议:尽可能使用
val
而不是
var
。与标准库中的JSON框架相比,还有其他更好的JSON框架,例如circe或Play JSON