Mam następujący przypadek użycia (jest to oczywiście wymyślny przykład, ale gdy już znam odpowiedź, będę mógł przenieść ją na prawdziwy problem, który mam rozwiązać):Zbieraj zgrupowane emisje z obserwowanych obiektów do jednej listy.
- Uzyskaj listę liczb całkowitych.
- je pogrupować w wyniku operacji% 4
- Zebrać elementy każdej grupy list
- ignorowanie żadnych grup/wymienia, które mają mniej elementów niż 3 elementów
- emitowania jednej liście, których elementy są listy utworzone w kroku # 3
Tu jest mój bieżący kod:
Observable
.from(Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12))
.groupBy(item -> item % 4)
.subscribe(groupedObservable -> {
groupedObservable
.toList()
.filter(list -> list.size() > 2)
.subscribe(result -> {
System.out.printf("%d results %s%n", result.size(), result);
});
});
a jego wyjście jest:
4 results [0, 4, 8, 12]
3 results [2, 6, 10]
3 results [3, 7, 11]
Tak więc wypisuje liczbę elementów każdej grupy, a następnie listę elementów. Chciałbym, żeby dane wyjściowe (w rzeczywistości nie obchodziły mnie klucze):
3 wyniki: [[0, 4, 8, 12], [2, 6, 10], [3, 7, 11]]
czyli w jakiś sposób spłaszczono zgrupowane obserwacje w jedną listę. Nie mogę tego zrobić. Na przykład dodanie .flatMap(integers -> Observable.just(integers))
po filter
niczego nie zmienia, ponieważ wpływa tylko na każdy obserwowany zgrupowany, a nie cały strumień. Czy istnieje sposób spełnienia moich wymagań?
Nie jestem pewien, czy mam rozumieć cię poprawnie, ale tutaj jest istota, która produkuje wyjście, które chciałeś - https://gist.github.com/nsk-mironov/e13fe46938bf887f174a –
To jest dokładnie to, co chciałem dostać. Podczas pisania odpowiedzi z kodem, aby ją zaakceptować, postaram się to zrozumieć; d – wujek