亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 Scala 嵌套 Map 轉換為 Java 嵌套 util.Map

將 Scala 嵌套 Map 轉換為 Java 嵌套 util.Map

子衿沉夜 2023-08-09 15:50:03
我在項目中使用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 等效項?
查看完整描述

2 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

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。嘗試一下,看看會發生什么。


查看完整回答
反對 回復 2023-08-09
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

您可以使用JavaConverters


查看完整回答
反對 回復 2023-08-09
  • 2 回答
  • 0 關注
  • 271 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號