我想知道是否可以将通过 Python 中的 Java 网关接收的 JavaList 转换为 python 列表,如果可以,如何。或者类似的东西是原生的 python 类型。
在 py4j 的文档中,我只能看到将 python 类型转换为 java,反之亦然。
我想知道是否可以将通过 Python 中的 Java 网关接收的 JavaList 转换为 python 列表,如果可以,如何。或者类似的东西是原生的 python 类型。
在 py4j 的文档中,我只能看到将 python 类型转换为 java,反之亦然。
正如官方文档中提到的advanced topics
, Array、List、Set、Map、Iterator 类型的 Java 集合在调用 Python 代码中会自动转换为兼容的格式。
需要注意的是,java list 不是转换为纯 Python 列表,而是转换为py4j.java_collections.JavaList
.
让我们看一个例子来证明这一点:
JAVA代码:
public class Py4JEntryPoint {
private List<String> javaList = new ArrayList<>();
public Py4JEntryPoint(){
javaList.add("Hello");
javaList.add("How");
javaList.add("you");
javaList.add("doin...!!!");
}
public List<String> getJavaList(){
return javaList;
}
public static void main(String[] args) {
GatewayServer gatewayServer = new GatewayServer(new Py4JEntryPoint());
gatewayServer.start();
System.out.println("Gateway Server Started");
}
}
Python 代码,调用网关:
gateway = JavaGateway()
jList = gateway.entry_point.getJavaList()
print(jList)
#output: ['Hello', 'How', 'you', 'doin...!!!']
print("Type of list returned by Java Gateway", type(jList)) #
#output: Type of list returned by Java Gateway <class 'py4j.java_collections.JavaList'>
pyList = list(jList)
print(pyList)
#output: ['Hello', 'How', 'you', 'doin...!!!']
print("Type of list after conversion", type(pyList))
#output: Type of list after conversion <class 'list'>
据我所知,PY4J 会自动将它们转换为 ArrayList 以在 python 中列出。
使用包含添加方法的第一个示例,但不返回 an
int
返回一个
ArrayList<String>