Проблема

Добавьте клиентские потоки в список всех заданных потоков. Не все потоки являются хост-потоками.

Как помогла теория множеств

Все потоки в исходном списке должны находиться в целевом списке. Если есть какие-либо клиентские потоки, они также будут включены в список источников. Функция биективная приведет к тому, что целевой список всегда будет содержать то же количество элементов, что и исходный список. Инъективная функция должна использовать все элементы из источника. Вооружившись этими знаниями, я понял, что вместо использования функции отображения (всегда биективной) необходима функция сокращения (возможно, инъективная). Результат? Правильная программа и красивый алгоритм.

sourceList.reduce((targetList, stream) =>
  stream.hasClient 
    ? [...targetList, stream, new ClientStream(stream)]
    : [...targetList, stream],
  []
);