webentwicklung-frage-antwort-db.com.de

Wie kann ich zwei ArrayLists zusammenstellen?

Ich habe zwei gleichgroße ArrayLists. Liste 1 besteht aus 10 Namen und Liste 2 besteht aus ihren Telefonnummern. 

Ich möchte die Namen und die Nummer in einem _ ArrayList zusammenfassen. Wie mache ich das?

38
Anirudh

Sie können .addAll() verwenden, um die Elemente der zweiten Liste der ersten hinzuzufügen:

array1.addAll(array2);

Edit: Basierend auf Ihrer obigen Erläuterung ("Ich möchte einen einzelnen String mit neuer Bezeichnung und Nummer."), Möchten Sie die erste Liste durchlaufen und die Artikel aus der zweiten Liste zu.

Etwas wie das:

int length = array1.size();
if (length != array2.size()) { // Too many names, or too many numbers
    // Fail
}
ArrayList<String> array3 = new ArrayList<String>(length); // Make a new list
for (int i = 0; i < length; i++) { // Loop through every name/phone number combo
    array3.add(array1.get(i) + " " + array2.get(i)); // Concat the two, and add it
}

Wenn Sie einreichen:

array1 : ["a", "b", "c"]
array2 : ["1", "2", "3"]

Sie erhalten:

array3 : ["a 1", "b 2", "c 3"]
70
Eric

fügen Sie der zweiten ArrayList eine ArrayList hinzu als:

Arraylist1.addAll(Arraylist2);

EDIT: Wenn Sie eine neue ArrayList aus zwei vorhandenen ArrayList erstellen möchten, gehen Sie folgendermaßen vor

ArrayList<String> arraylist3=new ArrayList<String>();

arraylist3.addAll(Arraylist1); // add first arraylist

arraylist3.addAll(Arraylist2); // add Second arraylist
15
ArrayList<String> resultList = new ArrayList<String>();
resultList.addAll(arrayList1);
resultList.addAll(arrayList2);
2
Android Killer

Eine ArrayList1 fügt Daten hinzu,

mArrayList1.add(data);

und Second ArrayList2, um weitere Daten hinzuzufügen,

mArrayList2.addAll(mArrayList1);
2
Najib Puthawala

für eine einfache Liste, die die Einträge nicht kopiert, können Sie sth folgendermaßen verwenden:

List<Object> mergedList = new ConcatList<>(list1, list2);

hier die umsetzung:

public class ConcatList<E> extends AbstractList<E> {

    private final List<E> list1;
    private final List<E> list2;

    public ConcatList(final List<E> list1, final List<E> list2) {
        this.list1 = list1;
        this.list2 = list2;
    }

    @Override
    public E get(final int index) {
        return getList(index).get(getListIndex(index));
    }

    @Override
    public E set(final int index, final E element) {
        return getList(index).set(getListIndex(index), element);
    }

    @Override
    public void add(final int index, final E element) {
        getList(index).add(getListIndex(index), element);
    }

    @Override
    public E remove(final int index) {
        return getList(index).remove(getListIndex(index));
    }

    @Override
    public int size() {
        return list1.size() + list2.size();
    }

    @Override
    public void clear() {
        list1.clear();
        list2.clear();
    }

    private int getListIndex(final int index) {
        final int size1 = list1.size();
        return index >= size1 ? index - size1 : index;
    }

    private List<E> getList(final int index) {
        return index >= list1.size() ? list2 : list1;
    }

}
2
benez

Wenn Sie eine Zeile machen möchten und list1 und list2 nicht ändern möchten, können Sie dies mit Stream tun

List<String> list1 = Arrays.asList("London", "Paris");
List<String> list2 = Arrays.asList("Moscow", "Tver");

List<String> list = Stream.concat(list1.stream(),list2.stream()).collect(Collectors.toList());
1
Sergey Orlov
var arr3 = new arraylist();
for(int i=0, j=0, k=0; i<arr1.size()+arr2.size(); i++){
    if(i&1)
        arr3.add(arr1[j++]);
    else
        arr3.add(arr2[k++]);
}

wie Sie sagen, "die Namen und Zahlen nebeneinander".

0
Harry Lee