2014-01-28 2 views
1

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

Я хочу преобразовать его в эквивалент 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() 
                   ^

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

+4

'JavaConversions' осуждается, вы должны благоприятствовать' JavaConverters' как предложено @senia –

ответ

5

Вы можете явно указать, что вы хотите, чтобы преобразовать с помощью 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]] 
+0

Nice :) спасибо лот – Mik378

+1

@ Mik378 Ответ принят достаточно :) –

+0

@ Кевин Райт Да, конечно, но для подтверждения ответа требуется не менее 3 минут. (stackoverflow предотвращает иначе) – Mik378