2017-10-10 6 views
0

J'interroge une base de données dans Scala qui retourne un objet java iterable. J'appelle la méthode spilterator pour créer un objet spilterator mais je n'ai aucune idée d'utiliser la syntaxe tryAdvance ou forEachRemaining dans Scala.Utilisation de Spliterator Java avec Scala

L'équivalent Java de la syntaxe est ci-dessous et cela fonctionne:

Spliterator<String> splitStr = nameList.spliterator(); 
while(splitStr.tryAdvance((n) -> System.out.println("name - " + n))); 

Voici ce que j'ai à Scala:

val nameListSplit = nameList.spliterator() 
while (splitStr.tryAdvance((n) -> println("name - " + n)) 

Comme vous pouvez le voir, je ne sais pas comment appeler utiliser la Méthode tryAdvance() dans scala, il en va de même pour la méthode forEachRemaining.

+0

Pourquoi ne faites-vous pas simplement 'nameList.forEach (n -> System.out.println ("nom -" + n)); – shmosel

Répondre

0

La traduction directe:

while(res4.tryAdvance { n => System.out.println("name - "+ n) })() 
//      ^= not -        ^^ unit (or {}); not ; 
//     ^Braces instead of parens are purely style 

La traduction idiomatiques:

nameList.forEach { n => println(s"name - $n") } 
//  ^foreach not iterator^interpolator not string + 
//     ^println not System.out.println 
//  ^forEach in Java, foreach in Scala (pretty sure Scala had them first) 
for(n <- nameList.asScala) println(s"name - $n") 
//^for-comprehension (sugar for chained foreach, map, flatMap, filter, withFilter depending on context (generalized monad-comprehensions)) 
// ^<- as in "take n from nameList.asScala" 
//    ^convert to a Scala collection (import collection.JavaConverters._) (needed for foreach not forEach; someone should add AnyVal wrappers for that) 
//      ^add yield here to do a (flat)map instead of foreach