【问题标题】:scala iterate java hashSetscala迭代java hashSet
【发布时间】:2017-03-16 22:32:33
【问题描述】:

我想知道如何在 Scala 中惯用地迭代 java.util.HashSet。目前,我在一个似乎不太好的while循环中使用java迭代器。

此外,我想知道可变可增长缓冲区是否有效,或者是否有可能避免创建不必要的对象。

import java.util

import scala.collection.generic.Growable
import scala.collection.mutable

val javaSet = new util.HashSet[String]()
javaSet.add("first")
javaSet.add("second")

val result: collection.Seq[String] with Growable[String] = mutable.Buffer[String]()
val itr = javaSet.iterator

while (itr.hasNext) {
  result += itr.next
}

result

编辑

stream 会更好吗? Apache Spark: Effectively using mapPartitions in Java

【问题讨论】:

    标签: java scala hashset iterate


    【解决方案1】:

    由于您显然使用的是 Java HashSet,因此请先执行此操作:

    import scala.collection.JavaConverters._
    

    这使您可以使用asScala 将 Java 集合转换为更易于使用的 Scala 集合。

    因此,如果您有一个名为 setHashSet 实例,您可以这样做:

    set.asScala.map(value => doSomething(value))
    

    或者你想做的任何事情,比如filterfoldLeft等等。

    仅供参考,上面的示例在语法上可以简化为:

    set.asScala.map(doSomething)
    

    【讨论】:

    • 我明白了。但这真的有效吗?由于我需要在 spark 作业的 mapPartitions 方法中调用此方法,因此我不想创建不必要的对象。
    • 这不应该是你关心的问题。运行 Spark 作业时,您关心的应该是最小化网络 shuffle 流量和调整垃圾收集。此外,您正在花时间寻找尚未证明存在的问题的解决方案。 Premature optimization is the root of all evil (or at least most of it) in programming.
    猜你喜欢
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2011-02-11
    • 2010-10-04
    相关资源
    最近更新 更多