Это можно сделать комбинацией методов replay() и autoConnect(0).

Метод replay() создает объект ConnectableObservable, который кэширует все элементы, отправляемые оригинальным hot observable.

Как было описано ранее, ConnectableObservable начинает эмитить элементы, когда на нем вызывается метод connect().

Чтобы получить поведение обычного cold observable, на ConnectableObservable вызывается метод autoConnect(numberOfSubscribers: Int). Этот метод принимает параметром переменную типа Int, которая задает количество подписчиков, необходимых для вызова connect(). Если параметром передано неположительное число, то connect() вызывается сразу.

В результате последовательного вызова replay() и autoConnect(0) создается observable, который эмитит все закэшированные элементы при вызове на нем subscribe(), т.е. ведет себя как cold observable.