首页 > 解决方案 > RxJava 将 List 转换为 Map of Maps

问题描述

我正在努力使用 RxJava 将 List 转换为 Map of Maps。我不知道如何根据嵌套值 Town 进行分组。我尝试了以下方法,但这会返回一个Observable<Map<String, GroupedObservable<String, A>>>. 那么如何转换以下代码以使其返回 aObservable<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());
}

标签: javaandroidrx-java

解决方案


您可以使用此方法。

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 中。


推荐阅读