Я думаю, вы неверно истолковали требования. Я думаю, что copyNames
на самом деле должен возвращать Iterator<String>
, а не Iterable
. Iterable
- это то, что вы называете iterator()
, чтобы получить Iterator
.
И я также согласен с тем, что комментарий Джона Клугемана является правильным. Не рекомендуется объявлять пользовательские интерфейсы, такие как PeopleIterable
и StringIterable
. Они не помогают.
В любом случае, вот краткая реализация для copyNames
(неправильный выбор имени метода!), Предполагающая, что он возвращает Iterator
, а не Iterable
.
public Iterator<String> copyNames() {
return Arrays.stream(people).map(p -> p.getName()).iterator();
}
Если вам действительно нужен Iterable
....
public Iterable<String> copyNames() {
return new Iterable<String>() {
public Iterator<String> iterator() {
return Arrays.stream(people).map(p -> p.getName()).iterator();
}
}
}