Найти повторяющиеся элементы, и это считать из нескольких потоков - PullRequest
1 голос
/ 08 января 2020

У меня есть два потока, которые содержат названия фруктов, как показано ниже. Я хочу поставить с названием фруктов и его счет.

, например:

Flux<String> flux1 = Flux.just("apple", "orang", "banana", "mangoes", "mangoes");
Flux<String> flux2 = Flux.just("pears", "limes", "banana", "plums", "apple");

ожидаемый выход: яблоко -2, оранг-1, банан-2, манго-2, груши- 1, limes-1, et c ..

это лучший способ генерировать вывод в Flux<Map>? или любое другое лучшее решение?

1 Ответ

2 голосов
/ 08 января 2020

Поскольку Map - это отдельный элемент, вы можете сгенерировать Mono<Map<String, Long>> следующим образом:

Mono<Map<String, Long>> result = Flux.merge(flux1, flux2).groupBy(it -> it).flatMap(group -> Mono.zip(Mono.just(group.key()), group.count())).collectMap(Tuple2::getT1, Tuple2::getT2);

В качестве альтернативы вы также можете получить Flux<Tuple2<String, Long>> следующим образом:

Flux<Tuple2<String, Long>> result = Flux.merge(flux1, flux2).groupBy(it -> it).flatMap(group -> Mono.zip(Mono.just(group.key()), group.count()));
...