如何使用 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
。
我在 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
。