Scala <-> Java 集合转换

转载:https://blog.csdn.net/dymkkj/article/details/77921573

一   scala  <==> java 

以下集合可以进行任意,转换。但在某些情况下引入的隐式转换不正确或未引入,仍然无法进行正确转换,如API的例子

scala.collection.Iterable <=> java.lang.Iterable

scala.collection.Iterable <=> java.util.Collection

scala.collection.Iterator <=> java.util.{ Iterator, Enumeration }

scala.collection.mutable.Buffer <=> java.util.List

scala.collection.mutable.Set <=> java.util.Set

scala.collection.mutable.Map <=> java.util.{ Map, Dictionary }

scala.collection.concurrent.Map <=> java.util.concurrent.ConcurrentMap

总结下来就是:collection:可以指定元素排序规则:sort方法或继承comparable

scala.collection.Iterable<=>java.lang.{iterable,collection}

scala.collection.Iterator<=>java.util.{Iterator,Enumeration}

scala的Buffer对应就是java.util.List,不可直接使用,使用ListBuffer

scala.collection.mutable.Buffer<=>java.util.List

scala.collection.mutable.Set<=>java.util.Set

scala.collection.mutable.Map<=>java.util.{Map,Dictionary}

并发安全集合

scala.collection.concurrent.Map<=>java.util.concurrent.ConcurrentMap

以下为scala.collection.mutable.ListBuffer<=>java.util.List

除要求引入相应的转换类JavaConversions._,还有引入ListBuffer=>java.util.List 具体转换方法

二  栗子

import scala.collection.JavaConversions._

import scala.collection.JavaConversions.bufferAsJavaList

import scala.collection.JavaConversions.asScalaBuffer

object Imliplicit{

          def main(args: Array[String]): Unit = {

              val sl = new  scala.collection.mutable.ListBuffer[Int] 

              val jl : java.util.List[Int] = sl

              val sl2 : scala.collection.mutable.Buffer[Int] = jl


              println("两者集合是否相等:   "+(sl eq sl2))

          } 

}

三  单向转换

补充介绍,下列可以进行单向转换

scala.collection.Seq =>java.util.List

scala.collection.mutable.Seq => java.util.List

scala.collection.Set =>java.util.Set

scala.collection.Map =>java.util.Map

操作参数/属性配置文件的类

java.util.Properties => scala.collection.mutable.Map[String,String]

具体转换方法

Scala 集合对象===>Java 集合对象

如果在进行java集合对象与scala集合对象的转换时,引入import scala.collection.JavaConversions._后仍然无法转换,

则尝试引入你要转换的集合类型对应的具体隐式转换方法,方法如下:

implicit def  asJavaCollection[A](it:iterable[A]):collection[A]

     隐式转换一个scala iterable 为  一个不可变的java.collection

implicit def  asJavaDictionary[A,B](m:mutable.Map[A,B]):Dictionary[A,B]

     隐式转换一个scala iterable 为一个java  Dictionary

implicit def  asJavaEnumeration[A](it:Iterator[A]):java.util.Enumeration

     隐式转换一个scala iterable 为一个java Enumeration


implicit def  asJavaIterable[A](i:iterable[A]):java.lang.Iterable[A]

     隐式转换一个scala iterable 为一个java Iterable


implicit def  asJavaIterator[A](it:Iterator[A]):java.lang.Iterator

     隐式转换一个scala iterator 为一个java iterator


implicit def  bufferAsJavaList[A](s:java.util.Set[A]):java.util.list

     隐式一个scalaBuffer(用其实现Buffer接口,AbstractBuffer抽象类的子类作为接受对象)为java.util.list


implicit def  mapAsJavaConcurrentMap[A,B](m:concurrent.Map[A,B]):ConcurrentMap[A,B]

     隐式转换一个Scala.mutable.concurrent.Map 转换为 java.concurrent.ConcurrentMap 


implicit def  mapAsJavaMap[A,B](m:Map[A,B]):java.util.Map[A,B]

     隐式转换一个scala.Map 转换为java map对象


implicit def  mutableMapAsJavaMap[A,B](m:mutable.Map[A,B]):java.util.Map[A,B]

     隐式转换一个 scala.mutable.Map转换为一个 java.util.Map对象


implicit def  mutableSeqAsJavaList[A,B](m:mutable.Seq[A,B]):java.util.List[A,B]

     隐式转换一个 scala.mutable.Seq 转换为一个 java.util.List对象

implicit def  mutableSetAsJavaSet[A,B](m:mutable.Set[A,B]):java.util.Set[A,B]

     隐式将一个 scala.mutable.Seq 转换为一个 java.util.Set对象

Java 集合对象 ==> Scala集合对象

implicit def  asScalaBuffer[A](l:java.util.List[A]):Buffer[A]

     隐式转换一个java.util.list对象为scalaBuffer(用其实现Buffer接口,AbstractBuffer抽象类的子类作为接受对象)


implicit def  asScalaIterator[A](it:java.util.Iterator[A]):Iterator[A]

     隐式转换一个java.util.iterator对象为scala.iterator


implicit def  asScalaSet[A](s:java.util.Set[A]):mutable.Set 

     隐式转换一个java.util.Set 为mutable.Set

implicit def  collectionAsScalaIterable[A](i:Collection[A]):Iterable[A]

     隐式转换一个java.collection对象为scala.iterable


implicit def  dictionaryAsScalaMap[A,B](p:Dictionary[A,B]):mutable.Map[A,B]

     隐式转换一个java.Dictionary 对象转换为Scala.mutable.Map[String,String]


implicit def  enumerationAsScalaIterator[A](i:java.lang.Enumeration[A]):Iterator[A]

     隐式将一个java.Enumeration 对象转换为Scala.iterator对象


implicit def  iterableAsScalaIterable[A](i:java.lang.Iterable[A]):Iterable[A]

     隐式将一个java.Iterable对象转换为Scala.iterable对象

implicit def  mapAsScalaConcurrentMap[A,B](m:ConcurrentMap[A,B]):concurrent.Map[A,B]

     隐式将一个java concurrentMap 转换为一个scala.concurrentMap对象


implicit def  mapAsScalaMap[A,B](m:java.util.Map[A,B]):mutable.Map[A,B]

     隐式将一个java.util.Map 转换为一个scala.Map 对象


implicit def  propertiesAsScalaMap(p:Properties):mutable.Map[String,String]

     隐式将一个 java Properties 转换为一个 mutable.Map对象 


implicit def  seqAsJavaList[A](seq:Seq[A]):java.util.List[A]

     隐式将一个scala.Seq  转换为一个 java.util.List 对象

implicit def  setAsJavaSet[A](set:Set[A]):java.util.Set[A]

     隐式将一个scala.Set  转换为一个 java.util.Set 对象  

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351