2014-09-28 2 views
1

В scala, как я могу инициализировать коллекцию scala из Java iterable, чистым идиоматическим способом?Scala initialize collection from Java iterable

Вот несколько хромает код с менее функциональным подходом для этого:

var collection = Seq[MyClass]() 

while (iterator.hasNext) { 
    val asArray: Array[String] = iterator.next.toArray 
    val val2 = asArray(2) 
    val val3 = asArray(3) 
    collection = collection :+ new MyClass(val2, val3) 
} 

Как инициализация коллекции из Java итерации иметь место более идиоматический?

ответ

1
import scala.collection.JavaConverters._ 

val collection = iterator.asScala.map{ x => 
    val asArray = x.toArray 
    new MyClass(asArray(2), asArray(3)) 
}.toIndexedSeq 
0

Scala может конвертировать и из Java коллекций легко, если вы импортировали хелперы преобразования, как показано ниже:

import scala.collection.JavaConversions._ 
val jl = new java.util.ArrayList[String]() 
jl.add("Hello") 
jl.add("There") 

val collection = j1.map{ x => new MyClass(x(2), x(3)) }.toList