RxJava превращает Список в Карту Карт - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь преобразовать Список в Карту Карт с помощью RxJava. Я не знаю, как сделать группировку на основе вложенного значения Town. Я попробовал следующее, но это возвращает Observable<Map<String, GroupedObservable<String, A>>>. Так как я могу преобразовать следующий код так, чтобы он возвращал Observable<Map<String, Map<String, Address>> вместо этого?

   public class A{
    String name;
    Address address;

    public A(String name, Address address) {
        this.name = name;
        this.address = address;
    }

    public Address getAddress() {
        return address;
    }

    public String getName() {
        return name;
    }
}

public class Address{

    String city;
    public Address(String city) {
        this.city = city;
    }

    public String getCity() {
        return city;
    }
}


public void mapFunction(){

    List<A> as = new ArrayList<>();
    as.add(new A("foo", new Address("city1")));
    as.add(new A("foo", new Address("city2")));


    Observable<Map<String, GroupedObservable<String, A>>> map = Observable.fromCallable(() -> as)
            .flatMapIterable(i -> i).
            groupBy(A::getName, a -> a)
            .toMap(a -> a.getKey());
}

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете использовать этот метод.

public static Map<String, Map<String, Address>> toMap(List<A> list) {
    Map<String, Map<String, Address>> outerMap = new HashMap<>();
    for (A a : list) {
        String name = a.getName();
        Map<String, Address> innerMap = outerMap.get(name);
        if (innerMap == null) {
            innerMap = new HashMap<String, Address>();
            outerMap.put(name, innerMap);
        }
        Address address = a.getAddress();
        innerMap.put(address.getCity(), address);
    }
    return outerMap;
}

Затем оберните результат в Observable.

...