[英]How to copy only distinct elements from one arrayList to another ArrayList
[英]How to copy elements from an ArrayList to another one NOT by reference?
我正在嘗試將每個元素從一個ArrayList(av)復制到另一個(copia)。 問題在於它們是通過引用復制的,因此每當我對原始版本進行任何更改時,副本也會被修改。 當然,這種行為不是必需的。 我應該怎么寫這個方法?
public void copiarArrayList(ArrayList<Articulo_Venta> copia, ArrayList<Articulo_Venta> av){
copia.clear();
for (int i = 0; i < av.size(); i++) {
copia.add(av.get(i));
}
}
Articulo_Venta有以下幾個字段:
int codigo;
String nombre;
float cantidad;
PS:我也試過了下一個:
copia = new ArrayList<Articulo_Venta>(av);
但它的元素仍然指向原始的ArrayList。
你想要的是深拷貝。 如果您的對象只包含原語,則可以使用clone(),否則最好的方法是手動執行: -
在Articulo_Venta
類中創建一個構造函數,該構造函數接受另一個Articulo_Venta
對象並初始化成員變量。
然后將代碼更改為: -
public void copiarArrayList(ArrayList<Articulo_Venta> copia, ArrayList<Articulo_Venta> av){
copia.clear();
for (int i = 0; i < av.size(); i++) {
copia.add(new Articulo_Venta(av.get(i)));
}
也可以在這里閱讀 - 如何在java中創建一個對象的深層副本
在添加對象之前克隆對象。 例如,而不是newList.addAll(oldList);
for(Articulo_Venta av : oldList) {
newList.add(av.clone());
}
克隆應該在Articulo_Venta中正確覆蓋。
這就是你如何做到的。
public class Articulo_Venta {
String a; //assuming you have these fields, then
Date d;
...
public Articulo_Venta clone(){
Articulo_Venta av = new Articulo_Venta();
av.a = this.a.clone();
av.d = this.d.clone();
...
return av;
}
}
在你的班級Articulo_Venta中創建一個新的構造函數。
public Articulo_Venta(int codigo, String number, float candidad)
{
this.codigo = codigo;
this.number = number;
this.candidad = candidad;
}
public void copiarArrayList(List<Articulo_Venta> copia, List<Articulo_Venta> av)
{
av.stream().forEach(t -> {
Articulo_Venta newObj = new Articulo_Venta(t.getCodigo(), t.getNumber(), t.getCandidad());
copia.add(newObj);
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.