2016-05-18 6 views
0

Ich habe eine ArrayList mit benutzerdefinierten Objekten.Eine neue ArrayList erstellen, die Objekte enthält, die der ersten Liste entsprechen?

Was ist der beste Weg, um eine separate ArrayList zu erstellen, die den gleichen Inhalt hat, aber nicht die gleichen Referenzen verwendet? Wenn ich das erste Objekt in list1 editiere, berührt es nicht das erste Objekt in list2, aber ansonsten sehen sie durch und durch gleich aus.

Wird es als richtig/gute Praxis angesehen, das Folgende zu tun, oder gibt es einen eingebauten Weg?

List<MyObject> firstList = getArrayListFromSQLiteDb(criteria); 
List<MyObject> secondList = new ArrayList<>(); 

for (MyObject object : firstList) { 
    MyObject newObject = new MyObject(); 
    newObject.setField1(object.getField1()); 
    newObject.setField2(object.getField2()); 
    newObject.setField3(object.getField3()); 
    secondList.add(newObject); 
} 
+0

Es sieht aus wie das, was Sie tun, ist in Ordnung. Sei aber vorsichtig. Wenn eines der Felder Referenzen sind, werden sie überkopiert und es klingt so, als ob Sie nicht wollen. –

+1

Liste firstList = getArrayListFromSQLiteDb (Kriterien); und Liste secondList = new ArrayList (firstList); –

+0

@ManuAG Wenn Onky sie die [Dokumentation] lesen würden (https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html) ... –

Antwort

4

Ein einfacher Weg, dies zu tun, die ursprüngliche Arraylist zu klonen wäre, also nicht Referenzen und mit der anderen Liste teilen bleiben unberührt, wenn Sie das Original zu verändern. Wie bei @ 911DidBush erwähnt, funktioniert dies nur, wenn der Listeninhalt geklont werden kann und die clone() -Methode korrekt implementiert wird.

List<MyObject> firstList = getArrayListFromSQLiteDb(criteria); 
List<MyObject> secondList = new ArrayList<>(); 

for(MyObject obj : firstList) { 
    secondList.add(obj.clone()); 
} 
+0

Sie sollten wahrscheinlich auch erwähnen, dass dies nur funktioniert, wenn der Listeninhalt geklont werden kann und die clone() -Methode korrekt implementiert wird. Andernfalls erhalten Sie eine CloneNotSupportedException –

Verwandte Themen