Решение уже есть, если раскоментить строчку, а цикл закоментить))
ВОПРОС!
Почему подобные конструкции не работают?
for (Iterator<Object> iterPets = pets.iterator(); iterPets.hasNext();) {
Object elemPets = iterPets.next();
for (Iterator<Cat> iterCats = cats.iterator(); iterCats.hasNext();){
if (elemPets.equals(iterCats.next()))
pets.remove(elemPets);
}
}
ИЛИ
for (Iterator<Object> iterPets = pets.iterator(); iterPets.hasNext();) {
for (Iterator<Cat> iterCats = cats.iterator(); iterCats.hasNext();){
if (iterPets.next().equals(iterCats.next()))
pets.remove(iterPets.next());
}
}package com.javarush.task.task08.task0820;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
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() {
Set<Cat> result = new HashSet<Cat>();
for (int i = 0; i < 4; i++) {
result.add(new Cat());
}
return result;
}
public static Set<Dog> createDogs() {
Set <Dog> result = new HashSet<Dog>();
for (int i = 0; i < 3; i++) {
result.add(new Dog());
}
return result;
}
public static Set<Object> join(Set<Cat> cats, Set<Dog> dogs) {
Set <Object> pets = new HashSet<Object>();
pets.addAll(cats);
pets.addAll(dogs);
return pets;
}
public static void removeCats(Set<Object> pets, Set<Cat> cats) {
//pets.removeAll(cats);
for (Iterator<Object> iterPets = pets.iterator(); iterPets.hasNext();) {
Object elemPets = iterPets.next();
for (Iterator<Cat> iterCats = cats.iterator(); iterCats.hasNext();){
if (elemPets.equals(iterCats.next()))
pets.remove(elemPets);
}
}
}
public static void printPets(Set<Object> pets) {
for (Iterator <Object> iterPets = pets.iterator(); iterPets.hasNext();){
System.out.println(iterPets.next());
}
}
static class Cat{
}
static class Dog{
}
}