Przed rozpoczęciem, myślę, że to pytanie ma bardzo prostą odpowiedź, że właśnie przeoczyłem. Pomyślałem, że jeszcze kilka oczu na to pytanie będzie w stanie wskazać mój problem dość szybko.Jak usunąć zduplikowane obiekty z dwóch oddzielnych ArrayLists?
Mam dwa ArrayLists, które chcę porównać i usunąć duplikaty z każdego z nich. Pierwsza ArrayList
jest starszą informacją o numerze ArrayList
, gdzie jako druga ArrayList
zawiera nową informację.
Podobnie jak
ArrayList<Person> contactList = new ArrayList();
contactList.add(new Person("Bob");
contactList.add(new Person("Jake");
contactList.add(new Person("Joe");
ontactList.add(new Person("Rob");
ArrayList<Person> updatedContactList = new ArrayList();
updatedContactList.add(new Person("Bob");
updatedContactList.add(new Person("Jake");
updatedContactList.add(new Person("Joe");
updatedContactList.add(new Person("Phil");
Moja Person
klasa jest bardzo proste, stworzone wyłącznie dla tego przykładu
public class Person {
private String name;
public Person(String a_name) {
name = a_name;
}
public String getName() {
return name;
}
}
Tak, stosując powyższe przykłady, chcę usunąć wszystkie duplikaty. Próbuję zachować to do dwóch ArrayLists, jeśli to możliwe, ale jestem gotów zrobić głęboki klon jednej z ArrayLists, jeśli muszę.
Więc chcę otrzymany ArrayList
mieć następujące informacje w nim kiedyś porównanie odbywa
Oto kod I już ułożyła
for(int i = 0; i < contactList.size(); i++) {
for(int j = 0; j < updatedContactList.size(); j++) {
if(contactList.get(i).getName().equals(updatedContactList.get(j).getName())) {
//removed friends
contactList.remove(contactList.get(i));
//new friends ---- only one at a time works
//updatedContactList.remove(updatedContactList.get(j));
}
}
}
jestem w stanie tylko aby usunąć osobę z jednego z ArrayLists w powyższej pętli w przeciwnym razie otrzymam niepoprawne wyniki.
Moje pytanie brzmi: czy istnieje prosty sposób na usunięcie zduplikowanych elementów z obu ArrayLists? Jeśli tak, jak mam to zrobić.
Zdaję sobie sprawę, że prawdopodobnie mógłbym gruntownie sklonować zaktualizowany ArrayList
i po prostu usunąć obiekty z tego, ale zastanawiam się, czy istnieje sposób, bez konieczności klonowania go.
Zdaję sobie również sprawę, że mogłem po prostu zapakować wszystkie elementy do zestawu i usunąć duplikaty, ale chcę zachować oddzielne obiekty "usunięte" i "nowe".
Zakładam, że poszczególne listy nie będą miały duplikatów, prawda? – arshajii
@arshajii Po zakończeniu porównania, każda lista nie powinna zawierać żadnych duplikatów między tymi dwoma. Jedna ArrayList będzie zawierała usuniętą "osobę", a druga ArrayList będzie zawierała tylko nowe obiekty "Person". – WilliamShatner
Mam na myśli wcześniej, zanim cokolwiek zostanie zrobione na dwóch listach. Nie możesz na przykład mieć dwóch "Boba" w 'liście kontaktów ', prawda? – arshajii