【问题标题】:How to convert a Java List to a Python list in py4j如何在 py4j 中将 Java 列表转换为 Python 列表
【发布时间】:2018-10-23 05:44:33
【问题描述】:

我想知道是否可以将通过 Python 中的 Java 网关接收的 JavaList 转换为 python 列表,如果可以,如何转换。或者类似的东西是原生的 python 类型。

在 py4j 的文档中,我只能看到将 python 类型转换为 java,但反之则不然。

【问题讨论】:

    标签: py4j


    【解决方案1】:

    正如官方文档advanced topics section 下所述,Array、List、Set、Map、Iterator 类型的 Java 集合在调用 Python 代码中会自动转换为兼容格式。
    需要注意的是java列表不是转换成纯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'>
    

    【讨论】:

      【解决方案2】:

      据我所知,PY4J 会自动将它们转换为 ArrayList 到 python 中的列表。

      https://www.py4j.org/

      使用包含添加方法的第一个示例,但不返回 an

      int 
      

      返回一个

      ArrayList<String>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-28
        • 1970-01-01
        • 2012-04-03
        • 2015-06-20
        • 2020-07-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多