Если вы используете метод RetainAll в Перечислите вы получите общие объекты между 2 списками .. \
Пример:
рассмотреть списки целые числа (только для примера) он будет работать с вашим классом ...
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(0, 1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<Integer>(Arrays.asList(1, 3, 5));
List<Integer> list3 = new ArrayList<Integer>(list1);
list3.retainAll(list2);
System.out.println("List1:" + list1);
System.out.println("List2:" + list2);
System.out.println("List common:" + list3);
}
В вашем случае классовыми контактов необходимо изменить таким образом, метод ArrayLst.retainAll() может как-то идентифицировать Контакт ли такой же, как другой, используя в качестве критериев номер телефона ...
Изменить/улучшения контакта класса путем добавления Hashcode и Равно:
но вы должны использовать в качестве критерия только номер телефона
public class Contact {
private String name;
private int phone;
public Contact(String name, int phone) {
this.name = name;
this.phone = phone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Contact [name=" + name + ", phone=" + phone + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + phone;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Contact other = (Contact) obj;
if (phone != other.phone)
return false;
return true;
}
public int getPhone() {
return phone;
}
public void setPhone(int phone) {
this.phone = phone;
}
}
Реализовать список контактов и вызвать метод RetainAll
public static void main(String[] args) {
List<Contact> list1 = new ArrayList<Contact>(Arrays.asList(new Contact(UUID.randomUUID().toString(), 1),
new Contact(UUID.randomUUID().toString(), 2), new Contact(UUID.randomUUID().toString(), 3),
new Contact(UUID.randomUUID().toString(), 4), new Contact(UUID.randomUUID().toString(), 5)));
List<Contact> list2 = new ArrayList<Contact>(Arrays.asList(new Contact(UUID.randomUUID().toString(), 1),
new Contact(UUID.randomUUID().toString(), 3), new Contact(UUID.randomUUID().toString(), 5)));
List<Contact> list3 = new ArrayList<Contact>(list1);
list3.retainAll(list2);
System.out.println("List1:" + list1);
System.out.println("List2:" + list2);
System.out.println("List common:" + list3);
}
Вам необходимо переопределить соответствующие равных() и хэш-код() реализации Контакты класс, чтобы сделать эту работу. JVM использует реализацию equals() для сравнения двух объектов одинаковыми или нет. – kosa
@ Nambari: Как я могу это сделать? Я новичок в java. –
http://www.javaworld.com/article/2073330/the-contains-trap-in-java-collections.html может быть хорошим примером/ – kosa