подготовить карту с помощью Observable Rx-java

Вот мой пример кода, который возвращает список JsonDocument с сервера cockbase.

Cluster cluster = CouchbaseCluster.create();
Bucket bucket = cluster.openBucket();

List<JsonDocument> foundDocs = Observable
    .just("key1", "key2", "key3", "key4", "key5")
    .flatMap(new Func1<String, Observable<JsonDocument>>() {
        @Override
        public Observable<JsonDocument> call(String id) {
            return bucket.async().get(id);
        }
    })
    .toList()
    .toBlocking()
    .single();

Я хочу вернуть Map вместо List. Мой тип возврата будет Map<String, JsonDocument>. Я пробовал методом toMap, но у меня это не сработало.


person Nitin    schedule 23.03.2017    source источник
comment
Пожалуйста, предоставьте код, который вы пробовали, и какой результат вы получили.   -  person Maksim Ostrovidov    schedule 23.03.2017
comment
Метод toMap требует функции в качестве аргумента, которую я не знаю, как написать   -  person Nitin    schedule 23.03.2017
comment
Ваша проблема совместить ключ и результат flatMap? Затем проверьте это - stackoverflow.com/a/41820372/7045114   -  person Maksim Ostrovidov    schedule 23.03.2017


Ответы (1)


Вы правильно упомянули в своем комментарии, что toMap нуждается в Function в качестве аргумента. Этот Function будет использоваться для "извлечения" (или, возможно, "создания") ключа, под которым каждое значение будет введено в карту.

Итак, в вашем случае вам понадобится Function<JsonDocument, String>, который принимает JsonDocument в качестве входных данных и каким-то образом возвращает String, который вы позже будете использовать для поиска JsonDocument в Map. Что это будет за String, можете ответить только вы - может быть, внутри JsonDocument есть какой-то идентификатор?

person david.mihola    schedule 23.03.2017