2017-10-10 46 views
0

我正在查询Scala中的一个数据库,该数据库返回一个Java可迭代对象。我将调用spilterator方法来创建spilterator对象,但我不知道要在Scala语法中使用tryAdvance或forEachRemaining。在Scala中使用Java分割器

Java的语法相当于低于它的工作原理:

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

这是我在斯卡拉:

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

正如你看到的,我不知道如何调用使用scala中的tryAdvance()方法,forEachRemaining方法也是如此。

+0

为什么你不只是做'nameList.forEach(N - >的System.out.println( “名字 - ” + n));'? – shmosel

回答

0

直接翻译:

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

的成语翻译:

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