java - 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());
}
解决方案
您可以使用此方法。
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 中。
推荐阅读
- c++ - 在目录中查找所有 .cpp .h 文件的常规方法(包括、src 等...)
- javascript - 如何动画更改网格项目大小 Material UI
- amazon-web-services - 如何使用 Elastic Beanstalk 自动执行 EBS 加密
- azure-functions - 将某些 Azure Functions 的访问权限限制为 AD 组的成员
- javascript - knex 仅在用户名不存在时添加用户名
- node.js - 从 Firestore 获取文档列表
- javascript - 如何在我的完整日历议程中显示今天的日期今天的日期
- php - 仅在 Woocommerce 单品中的“特色”产品的自定义选项卡中显示
- javascript - 如何使用css隐藏在空src上添加的浏览器损坏的默认图像?
- c - Makefile 仅在将文件名传递给它时执行 (C)