Не происходит удаление данных кет из сета. Насколько я понимаю по причине того, что через == я сравниваю ссылки на объекты, а не сами объекты, переопределение методов мы еще уж подавно не изучали. Как можно сравнить данные объекты?
package com.javarush.task.task08.task0820;
import java.util.HashSet;
import java.util.Set;
import java.util.*;
/*
Множество всех животных
*/
public class Solution {
public static void main(String[] args) {
Set<Cat> cats = createCats();
Set<Dog> dogs = createDogs();
Set<Object> pets = join(cats, dogs);
printPets(pets);
removeCats(pets, cats);
printPets(pets);
}
public static Set<Cat> createCats() {
HashSet<Cat> result = new HashSet<Cat>();
result.add(new Cat());
result.add(new Cat());
result.add(new Cat());
result.add(new Cat());
return result;
}
public static Set<Dog> createDogs() {
HashSet<Dog> dog= new HashSet<Dog>();
dog.add(new Dog());
dog.add(new Dog());
dog.add(new Dog());
return dog;
}
public static Set<Object> join(Set<Cat> cats, Set<Dog> dogs) {
HashSet<Object> sum = new HashSet<Object>();
sum.addAll(cats);
sum.addAll(dogs);
return sum;
}
public static void removeCats(Set<Object> pets, Set<Cat> cats) {
Iterator<Object> i = pets.iterator();
Iterator<Cat> ia = cats.iterator();
while(ia.hasNext()){
Cat a = ia.next();
while(i.hasNext()){
Object o = i.next();
if(o==a){
i.remove();
}
}
}
}
public static void printPets(Set<Object> pets) {
for(Object a : pets){
System.out.println(a);
}
}
public static class Dog{
}
public static class Cat{
}
}