Как я понимаю, у меня неверное трактование последнего условия про main. Сделал самостоятельно так:
Set<Cat> cats = createCats();
        List list = new ArrayList(cats);
        list.remove(0);
        Set<Cat> cats2 = new HashSet(list);
        printCats(cats2);
Кривовато, но был доволен, что результат обеспечен (toArray вспомнил, гуглил, попробовал, но сделал, как я потом понял, ошибку в оформлении, и он не прошёл). Тем не менее, валидатор принимать не стал. Я правильно понимаю, что это по причине того, чтобы он хотел, чтобы мы удаляли из множества, а не списка? Но разве toArray не работает по тому же принципу, переводя в список? P.S. Не могу перекопировать весь код, т.к. задачу по итогу решил с toArray (увидел через комментарии где была ошибка в оформлении).