Как преобразовать итератор карты из Java в Scala с помощью JavaConversions

Я использую Scala 2.10.3.
result.iterator() возвращает Iterator<java.util.Map<String, Object>>. (в Java так)

Я хочу преобразовать его в эквивалент Scala.
Я использую import scala.collection.JavaConversions._, чтобы попытаться добиться цели.

Однако кажется, что он не может учитывать параметры типа, в этом случае он может преобразовать java.util.Iterator в эквивалент Scala, но не может преобразовать java.util.Map в эквивалент Scala.

Действительно, в этой строке возникает ошибка компилятора:

val results: Iterator[Map[String, AnyRef]] = result.iterator()

    type mismatch;
     found   : java.util.Iterator[java.util.Map[String,Object]]
     required: scala.collection.Iterator[scala.collection.immutable.Map[String,AnyRef]]
     val results: Iterator[Map[String, AnyRef]] = result.iterator()
                                                                ^

Есть ли короткий способ сделать трюк?


person Mik378    schedule 28.01.2014    source источник
comment
JavaConversions устарел, вам следует отдать предпочтение JavaConverters, как предлагает @senia   -  person Kevin Wright    schedule 28.01.2014


Ответы (1)


Вы можете явно указать, что вы хотите преобразовать, используя JavaConverters вместо JavaConversions следующим образом:

import scala.collection.JavaConverters._
def javaIt: java.util.Iterator[java.util.Map[String, Object]] = ???

def scalaIt = javaIt.asScala map {_.asScala}
// Iterator[scala.collection.mutable.Map[String,Object]]
person senia    schedule 28.01.2014
comment
@Kevin Wright Да, конечно, но проверка ответа занимает не менее 3 минут. (в противном случае stackoverflow предотвращает) - person Mik378; 28.01.2014