2015-11-17 3 views
0

Можете ли вы каким-то образом объединить двух арраистов на треть? Я знаю, что вы можете сделать это, когда у вас есть (как показано ниже):Конкатенировать arraylists

ArrayList<String>arraylist1 = new ArrayList<>(); 
    ArrayList<String>arraylist2 = new ArrayList<>(); 

    ArrayList<String>al = new ArrayList<>(); 
    al.addAll(arraylist1); 
    al.addAll(arraylist2); 

Но как это сделать, если у вас есть ArrayLists в разных конструкторах как ?:

ArrayList<People>arraylist1 = new ArrayList<>(); 
ArrayList<Billing>arraylist2 =new ArrayList<>(); 
+0

Почему бы вам даже подумать о том, чтобы добавить два, возможно, совершенно разных класса в один «Список»? – SomeJavaGuy

+3

Добавление ArrayLists разных типов - плохая идея. Конечно, вы можете добавить их все в ArrayList of Objects (raw), но это не очень хорошо – TheLostMind

+0

ok, тогда я лучше перестаю тратить время на попытку решить эту проблему. Ха-ха. Большое спасибо за Вашу помощь. – JJ72

ответ

3

Метод addAll из Collection<E> имеет подпись

public boolean addAll(Collection<? extends E> c) 

подстановочный здесь (?) означает, что он достаточно универсален, чтобы принимать какие-либо инкассации y подтип E.

Это означает, что если тип элемента вашего третьего списка имеет общий супертип типов двух исходных списков (Object всегда будет работать), вы можете это сделать.

Например, это отпечатки [X, Y, 1, 2, 3].

List<String> list1 = Arrays.asList("X", "Y"); 
List<Integer> list2 = Arrays.asList(1, 2, 3); 
List<Object> list3 = new ArrayList<>(); 
list3.addAll(list1); 
list3.addAll(list2); 
System.out.println(list3); 

Однако, как правило, лучше стараться избегать использования смешанных типов.

+0

Большое спасибо. Если у вас есть альтернативное решение моей основной проблемы (печать нужных людей с правильным выставлением счетов), пожалуйста, дайте мне знать :) – JJ72

+0

@ JJ72 Являются ли люди и списки счетов одинаковой длины? Если это возможно, вам нужен новый класс с полями 'person' и' billing'? –

+0

@ JJ72, как было предложено в моем комментарии, вы могли бы создавать ссылки от 'Billing' до' Person' и/или vica verse или создавать отдельный класс 'Billingbook', который хранит что-то вроде' Map > 'где вы можете получить свою информацию. – SomeJavaGuy

Смежные вопросы