RxJava: возвращает результаты из внутренних вложенных циклов - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь использовать RxJava для итерации по двум массивам, накапливать результаты во внутреннем цикле и в конечном итоге вернуть Single<Map>.

Вот фрагмент того, чего я пытаюсь достичь:

private Map<String, Collection<String>> processData(List<Organization> organizations, List<User> users) {
    return Flowable.fromIterable(organizations) //
        .flatMapSingle(organization-> Flowable.fromIterable(users) //
            .filter(organization -> organization.exist(user)) //
            .toMultimap(organization, user))
        .blockingSingle();
}

Мне не нравится вызов blockSingle, есть ли лучший способ справиться с этим делом?

EDIT

Как и предполагалось, я избавился от RxJava и использую потоки Java8 следующим образом:

organizations.streams() //
        .map(organization-> users.stream()
            .filter(organization -> organization.exist(user))
            .collect(MultimapCollector.toMultimap(user::role, user::id)));

Я не могу понять, как в итоге получить результат как Multimap<String,String>, в настоящее время он возвращается как Stream<Object>.

1 Ответ

0 голосов
/ 02 ноября 2018

Зачем вам использовать RxJava для этой задачи? Здесь нет асинхронности, поэтому просто используйте .filter() / .map() / .flatMap() из Java 8 (https://www.mkyong.com/java8/java-8-filter-a-map-examples/).

...