【问题标题】:Using Java spliterator with Scala在 Scala 中使用 Java 拆分器
【发布时间】:2018-03-22 11:16:18
【问题描述】:

我在 Scala 中查询一个返回 java 可迭代对象的数据库。我调用了 spilterator 方法来创建一个 spilterator 对象,但我不知道在 Scala 语法中使用 tryAdvance 或 forEachRemaining。

Java 语法等价物如下所示:

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

这是我在 Scala 中所拥有的:

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

如你所见,我不知道如何在 scala 中调用 tryAdvance() 方法,forEachRemaining 方法也是如此。

【问题讨论】:

  • 你为什么不直接做nameList.forEach(n -&gt; System.out.println("name - " + n));

标签: java scala iterator spliterator


【解决方案1】:

直接翻译:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多