Должен ли я вернуть коллекцию или поток?

Предположим, у меня есть метод, который возвращает доступное только для чтения представление в список членов:

class Team {
    private List < Player > players = new ArrayList < > ();

    // ...

    public List < Player > getPlayers() {
        return Collections.unmodifiableList(players);
    }
}

Далее предположим, что все, что делает клиент, это итерация по списку один раз, немедленно. Возможно поместить игроков в JList или что-то. Клиент не хранит ссылку на список для последующей проверки!

Учитывая этот общий сценарий, я должен вместо этого возвращать поток?

public Stream < Player > getPlayers() {
    return players.stream();
}

Или возвращается поток не идиоматический в Java? Были ли потоки спроектированы так, чтобы они всегда «заканчивались» внутри одного и того же выражения, в котором они были созданы?

146
задан Ömer Erden 28 June 2019 в 09:33
поделиться