【问题标题】:Convert an ArrayList to an object array将 ArrayList 转换为对象数组
【发布时间】:2011-02-14 06:40:32
【问题描述】:

java中是否有将ArrayList转换为对象数组的命令。我知道如何将每个对象从 arrayList 复制到对象数组中,但我想知道它是否会自动完成。

我想要这样的东西:

ArrayList<TypeA> a;

// Let's imagine "a" was filled with TypeA objects

TypeA[] array = MagicalCommand(a);

【问题讨论】:

    标签: java arrays arraylist


    【解决方案1】:

    使用这些库:

    • gson-2.8.5.jar
    • json-20180813.jar

    使用此代码:

    List<Object[]> testNovedads = crudService.createNativeQuery(
                    "SELECT cantidad, id FROM NOVEDADES GROUP BY id ");
    
            Gson gson = new Gson();
            String json = gson.toJson(new TestNovedad());
            JSONObject jsonObject = new JSONObject(json);
            Collection<TestNovedad> novedads = new ArrayList<>();
            for (Object[] object : testNovedads) {
                Iterator<String> iterator = jsonObject.keys();
                int pos = 0;
                for (Iterator i = iterator; i.hasNext();) {
                    jsonObject.put((String) i.next(), object[pos++]);
                }
                novedads.add(gson.fromJson(jsonObject.toString(), TestNovedad.class));
            }
            for (TestNovedad testNovedad : novedads) {
                System.out.println(testNovedad.toString());
            }
    
    
    /**
     * Autores: Chalo Mejia 
     * Fecha: 01/10/2020
     */
    package org.main;
    
    import java.io.Serializable;
    
    public class TestNovedad implements Serializable {
    
        private static final long serialVersionUID = -6362794385792247263L;
    
        private int id;
    
        private int cantidad;
    
        public TestNovedad() {
            // TODO Auto-generated constructor stub
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public int getCantidad() {
            return cantidad;
        }
    
        public void setCantidad(int cantidad) {
            this.cantidad = cantidad;
        }
    
        @Override
        public String toString() {
            return "TestNovedad [id=" + id + ", cantidad=" + cantidad + "]";
        }
    
    }
    

    【讨论】:

    • 可以参考原问题吗?
    【解决方案2】:

    是的。 ArrayList 有一个 toArray() 方法。

    http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html

    【讨论】:

    • 打印时不起作用。它只打印对象地址:System.out.println(Arrays.toString(itemsList.toArray()));
    【解决方案3】:

    将 ArrayList 转换为对象 数组

    ArrayList 有一个接受 Collection 的构造函数,所以常见的 成语是:

    List<T> list = new ArrayList<T>(Arrays.asList(array));
    

    它构造了由数组创建的列表的副本。

    现在,Arrays.asList(array) 将包装数组,因此更改列表 会影响数组,反之亦然。虽然你不能添加或删除

    此类列表中的元素。

    【讨论】:

      【解决方案4】:

      像标准 Collection.toArray(T[]) 这样的东西应该可以满足您的需求(注意 ArrayList 实现了 Collection):

      TypeA[] array = a.toArray(new TypeA[a.size()]);
      

      附带说明,您应该考虑将a 定义为List&lt;TypeA&gt; 类型而不是ArrayList&lt;TypeA&gt;,这样可以避免某些可能并不真正适用于您的应用程序的特定于实现的定义。

      另外,请参阅this question 关于使用a.size() 而不是0 作为传递给a.toArray(TypeA[]) 的数组大小

      【讨论】:

        【解决方案5】:

        你可以使用这个代码

        ArrayList<TypeA> a = new ArrayList<TypeA>();
        Object[] o = a.toArray();
        

        如果你想让那个对象回到 TypeA,只需用 instanceOf 方法检查它。

        【讨论】:

          【解决方案6】:
          TypeA[] array = (TypeA[]) a.toArray();
          

          【讨论】:

          • 不带参数的 toArray 返回一个 Object[] 而不是 TypeA[]。该代码将在运行时失败。
          • 你可以投射例如String[]Object[],但反之则不然。
          猜你喜欢
          • 2013-02-21
          • 2020-10-29
          • 2013-10-16
          • 1970-01-01
          • 1970-01-01
          • 2012-10-17
          • 2011-09-18
          • 2012-10-21
          相关资源
          最近更新 更多