Вы неправильно поняли, как работает throttleFirst
.
Из его javadocs:
@ param windowDuration
time to wait before emitting another item after emitting the last item
Это означает, что 3100
не должен испускаться, поскольку 2900
уже испущен, и между ними всего 200 миллисекунд, а не 1 полная секунда.
Если вы хотите, чтобы ваши выводы были такими, как вы написали выше, вы можете использовать это:
.window(1, TimeUnit.SECONDS)
.flatMap { it.take(1) }
вместо throttleFirst
.
Это разделяет значения на 1-секундные интервалы (как наблюдаемые) и принимает первое значение каждого окна.