【发布时间】: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中是否有将ArrayList转换为对象数组的命令。我知道如何将每个对象从 arrayList 复制到对象数组中,但我想知道它是否会自动完成。
我想要这样的东西:
ArrayList<TypeA> a;
// Let's imagine "a" was filled with TypeA objects
TypeA[] array = MagicalCommand(a);
【问题讨论】:
使用这些库:
使用此代码:
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 + "]";
}
}
【讨论】:
是的。 ArrayList 有一个 toArray() 方法。
http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html
【讨论】:
System.out.println(Arrays.toString(itemsList.toArray()));
将 ArrayList 转换为对象 数组
ArrayList 有一个接受 Collection 的构造函数,所以常见的 成语是:
List<T> list = new ArrayList<T>(Arrays.asList(array));
它构造了由数组创建的列表的副本。
现在,Arrays.asList(array) 将包装数组,因此更改列表
会影响数组,反之亦然。虽然你不能添加或删除
【讨论】:
像标准 Collection.toArray(T[]) 这样的东西应该可以满足您的需求(注意 ArrayList 实现了 Collection):
TypeA[] array = a.toArray(new TypeA[a.size()]);
附带说明,您应该考虑将a 定义为List<TypeA> 类型而不是ArrayList<TypeA>,这样可以避免某些可能并不真正适用于您的应用程序的特定于实现的定义。
另外,请参阅this question 关于使用a.size() 而不是0 作为传递给a.toArray(TypeA[]) 的数组大小
【讨论】:
你可以使用这个代码
ArrayList<TypeA> a = new ArrayList<TypeA>();
Object[] o = a.toArray();
如果你想让那个对象回到 TypeA,只需用 instanceOf 方法检查它。
【讨论】:
TypeA[] array = (TypeA[]) a.toArray();
【讨论】:
String[] 到 Object[],但反之则不然。