2017-10-10 79 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