如何使用 py4j 将 Scala HashSet 转换为 Python 集?

How can I convert a Scala HashSet to a Python set using py4j?

我在 Scala 中有一个对象 returns a Set[String]:

object MyObject {
  val setOfStrings = Set[String]("string1","string2")
}

我可以通过我的 Python 代码(使用 Py4J)成功引用该 val:

jvm.com.package.MyObject.setOfStrings()

但是我不知道如何用它做任何有用的事情。我想将其转换为 python 集。

我用这个成功做到了:

eval(
  str(
    jvm.com.package.MyObject.setOfStrings()
  )
      .replace("Set(", "{\"")
      .replace(")", "\"}")
      .replace(", ", "\", \"")
)

但这是一种非常脆弱的实现方式,我假设 Py4J 提供了一种更好的方法。

我知道 SetConverter 可以将 python 集转换为 Java 集,但我想做相反的事情。有人知道怎么做吗?

您可以在 Scala 端使用 java.util.Set,Py4J 将其 will be converted 转换为 Python 等价物 MutableSet.

如果您不想在您的 Scala 代码库中使用 Java 集合,那么当您想要进行通信时,您可能希望将 scala.collection.immutable.Set 转换为它的 Java 等价物Python.

我没有运行这个代码,但你可能会这样做:

object YourObject {
  val setOfStrings = Set[String]("string1","string2")
}

object ViewObject {
  import scala.jdk.CollectionConverters._
  def setOfStrings: java.util.Set[String] = YourObject.setOfStrings.asJava
}

并在Python中使用它:

jvm.com.package.ViewObject.setOfStrings()

请注意,在这种情况下,您 won't be able to modify the collection。如果您希望能够在 Python 中更新视图并将更改反映回 Scala,那么您必须在 Scala 代码中使用 scala.collection.mutable.Set