Я недавно начал использовать Project Reactor, и у меня есть сценарий, который я не могу понять.
В основном я хотел бы сгруппировать определенный поток и затем получить хэш-карту, такую как grouping key -> List of grouped values
. Я играл с API, но самое большее, что у меня есть, - это получение значений, или ключей, или счетчика, но не нужной мне структуры данных. Это будет код, например, для получения значений:
var elements = new ArrayList<Integer>();
Flux.just(-1, -2, -3, 1, 2, 3)
.groupBy(val -> val.compareTo(0))
.flatMap(Flux::collectList)
.subscribe(elements::addAll);
Тест, который я хотел бы пройти, следующий:
@Test
public void groupBy() {
var elements = new HashMap<Integer, List<Integer>>();
Flux.just(-1, -2, -3, 1, 2, 3)
.groupBy(val -> val.compareTo(0))
// Do something here ...
.subscribe(...);
assertThat(elements).containsKeys(-1, 1);
assertThat(elements.get(-1)).containsExactly(-1, -2, -3);
assertThat(elements.get(1)).containsExactly(1, 2, 3);
}
Как я мог достичь последнего?