轉(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]
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ì)象??