Scala <-> Java 集合轉(zhuǎn)換

轉(zhuǎn)載:https://blog.csdn.net/dymkkj/article/details/77921573

一 ? scala ?<==> java?

以下集合可以進(jìn)行任意,轉(zhuǎn)換。但在某些情況下引入的隱式轉(zhuǎn)換不正確或未引入,仍然無(wú)法進(jìn)行正確轉(zhuǎn)換,如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

總結(jié)下來(lái)就是:collection:可以指定元素排序規(guī)則:sort方法或繼承comparable

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

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

scala的Buffer對(duì)應(yīng)就是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}

并發(fā)安全集合

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

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

除要求引入相應(yīng)的轉(zhuǎn)換類JavaConversions._,還有引入ListBuffer=>java.util.List 具體轉(zhuǎn)換方法

二 ?栗子

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))

? ? ? ? ? }?

}

三 ?單向轉(zhuǎn)換

補(bǔ)充介紹,下列可以進(jìn)行單向轉(zhuǎn)換

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

操作參數(shù)/屬性配置文件的類

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

具體轉(zhuǎn)換方法

Scala 集合對(duì)象===>Java 集合對(duì)象

如果在進(jìn)行java集合對(duì)象與scala集合對(duì)象的轉(zhuǎn)換時(shí),引入import scala.collection.JavaConversions._后仍然無(wú)法轉(zhuǎn)換,

則嘗試引入你要轉(zhuǎn)換的集合類型對(duì)應(yīng)的具體隱式轉(zhuǎn)換方法,方法如下:

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

? ? ?隱式轉(zhuǎn)換一個(gè)scala iterable 為 ?一個(gè)不可變的java.collection

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

? ? ?隱式轉(zhuǎn)換一個(gè)scala iterable 為一個(gè)java ?Dictionary

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

? ? ?隱式轉(zhuǎn)換一個(gè)scala iterable 為一個(gè)java Enumeration


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

? ? ?隱式轉(zhuǎn)換一個(gè)scala iterable 為一個(gè)java Iterable


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

? ? ?隱式轉(zhuǎn)換一個(gè)scala iterator 為一個(gè)java iterator


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

? ? ?隱式一個(gè)scalaBuffer(用其實(shí)現(xiàn)Buffer接口,AbstractBuffer抽象類的子類作為接受對(duì)象)為java.util.list


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

? ? ?隱式轉(zhuǎn)換一個(gè)Scala.mutable.concurrent.Map 轉(zhuǎn)換為 java.concurrent.ConcurrentMap?


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

? ? ?隱式轉(zhuǎn)換一個(gè)scala.Map 轉(zhuǎn)換為java map對(duì)象


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

? ? ?隱式轉(zhuǎn)換一個(gè) scala.mutable.Map轉(zhuǎn)換為一個(gè) java.util.Map對(duì)象


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

? ? ?隱式轉(zhuǎn)換一個(gè) scala.mutable.Seq 轉(zhuǎn)換為一個(gè) java.util.List對(duì)象

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

? ? ?隱式將一個(gè) scala.mutable.Seq 轉(zhuǎn)換為一個(gè) java.util.Set對(duì)象

Java 集合對(duì)象 ==> Scala集合對(duì)象

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

? ? ?隱式轉(zhuǎn)換一個(gè)java.util.list對(duì)象為scalaBuffer(用其實(shí)現(xiàn)Buffer接口,AbstractBuffer抽象類的子類作為接受對(duì)象)


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

? ? ?隱式轉(zhuǎn)換一個(gè)java.util.iterator對(duì)象為scala.iterator


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

? ? ?隱式轉(zhuǎn)換一個(gè)java.util.Set 為mutable.Set

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

? ? ?隱式轉(zhuǎn)換一個(gè)java.collection對(duì)象為scala.iterable


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

? ? ?隱式轉(zhuǎn)換一個(gè)java.Dictionary 對(duì)象轉(zhuǎn)換為Scala.mutable.Map[String,String]


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

? ? ?隱式將一個(gè)java.Enumeration 對(duì)象轉(zhuǎn)換為Scala.iterator對(duì)象


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

? ? ?隱式將一個(gè)java.Iterable對(duì)象轉(zhuǎn)換為Scala.iterable對(duì)象

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

? ? ?隱式將一個(gè)java concurrentMap 轉(zhuǎn)換為一個(gè)scala.concurrentMap對(duì)象


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

? ? ?隱式將一個(gè)java.util.Map 轉(zhuǎn)換為一個(gè)scala.Map 對(duì)象


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

? ? ?隱式將一個(gè) java Properties 轉(zhuǎn)換為一個(gè) mutable.Map對(duì)象?


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

? ? ?隱式將一個(gè)scala.Seq ?轉(zhuǎn)換為一個(gè) java.util.List 對(duì)象

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

? ? ?隱式將一個(gè)scala.Set ?轉(zhuǎn)換為一個(gè) java.util.Set 對(duì)象??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容