猿问

将 Scala 嵌套 Map 转换为 Java 嵌套 util.Map

我在项目中使用Scala,想与Stripe集成,但它只提供Java API。例如,要创建会话,我使用:


val params = new util.HashMap[String, AnyRef]

val paymentMethodTypes = new util.ArrayList[String]

paymentMethodTypes.add("card")

params.put("payment_method_types", paymentMethodTypes)

params.put("mode", "setup")

params.put("success_url", "https://test.app/success")

params.put("cancel_url", "https://test.app/cancel")

val session = Session.create(params)

这段代码运行得很好,但是非常丑陋并且包含很多样板文件。我想使用 ScalaMap[String, AnyRef]并创建会话,如下所示:


import scala.collection.JavaConverters._

val params2: Map[String, AnyRef] = Map(

  "payment_method_types" -> List("card"),

  "mode" -> "setup",

  "success_url" -> "https://test.app/success",

  "cancel_url" -> "https://test.app/cancel"

)

val session2 = Session.create(mapAsJavaMap[String, AnyRef](params2))

事实证明,mapAsJavaMap无法转换Map中的嵌套对象。有没有办法将任意 Scala Map 与其他 Maps 和 Lists 转换为 Java 等效项?


子衿沉夜
浏览 236回答 2
2回答

函数式编程

JavaConverters已被弃用。尝试一下CollectionConverters。import scala.jdk.CollectionConverters._def convertMap[K](scalaMap :Map[K,AnyRef]) :java.util.Map[K,AnyRef] =  scalaMap.map{ case (k,v) => v match {    case m:Map[_,AnyRef] => (k, convertMap(m))  //recursive    case l:List[_]       => (k, l.asJava)       //java.util.List[_]    case _               => (k, v)              //unchanged  }}.asJava不确定这是否真的适合您,因为所有值都是 type AnyRef。尝试一下,看看会发生什么。

慕标5832272

您可以使用JavaConverters
随时随地看视频慕课网APP

相关分类

Java
我要回答