简体   繁体   English

RxJava将List转换为Maps

[英]RxJava transform List into a Map of Maps

I'm struggling with transforming a List into a Map of Maps with RxJava. 我正在努力使用RxJava将列表转换为Maps地图。 I don't know how to do the grouping based on nested value Town. 我不知道如何基于嵌套值Town进行分组。 I tried the following but this returns a Observable<Map<String, GroupedObservable<String, A>>> . 我尝试了以下操作,但这返回了Observable<Map<String, GroupedObservable<String, A>>> So how can i transform the following code so that it returns a Observable<Map<String, Map<String, Address>> instead? 那么,如何转换以下代码,使其返回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());
}

You can use this method. 您可以使用此方法。

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;
}

Then wrap the result in an Observable. 然后将结果包装在Observable中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM