Обычно использование .collect
с существующей коллекцией не является хорошей практикой. Обычно вы должны собирать в новую коллекцию .
Хотя, если вы все еще хотите изменить существующую коллекцию (что может привести к проблемам параллелизма), вы можете использовать .forEach
вместо:
List<String> selectedSources = new ArrayList<>();
sources.stream()
.filter(source -> isSelected(source, selectedSources))
.forEach(selectedSources::add);
Поскольку вы пишете «не совсем функциональный» код, модифицирующий существующую коллекцию, нет смысла заставлять подход Stream API
здесь.
ИМХО, улучшено для l oop и вложенного оператора if может хорошо работать в вашем случае. Код более читабелен:
List<String> selectedSources = new ArrayList<>();
for (String source : sources) {
if (isSelected(source, selectedSources)) {
selectedSources.add(source);
}
}