RxJava哈希映射转换
假设我有以下数据结构:RxJava哈希映射转换,java,android,hashmap,transformation,rx-java,Java,Android,Hashmap,Transformation,Rx Java,假设我有以下数据结构: Map<String, ObjectA> map; 我的最终目标是返回: Map<String, String> Map 其中第一个字符串与原始字符串相同,第二个字符串为“字符串a”。要实现这一点,我需要进行哪些转换 如果这是一个列表,我会使用Observable.from(),从单个项目中获取我想要的内容,然后在最后使用toList()将它们连接在一起。但这是一个映射,我从来也不知道如何在RxJava中对映射执行迭代。任何帮助都将不胜感激
Map<String, ObjectA> map;
我的最终目标是返回:
Map<String, String>
Map
其中第一个字符串与原始字符串相同,第二个字符串为“字符串a”。要实现这一点,我需要进行哪些转换
如果这是一个列表,我会使用Observable.from(),从单个项目中获取我想要的内容,然后在最后使用toList()将它们连接在一起。但这是一个映射,我从来也不知道如何在RxJava中对映射执行迭代。任何帮助都将不胜感激
编辑。我知道我可以使用Observable.create来实现这一点,并像第一个答案那样使用普通的Java/方式。我真正想知道的是,是否有任何Rx操作符允许我这样做,如Observable.from、flatMap和toList,如果我正在转换列表,请尝试以下代码:
Observable.just(map)
.map(stringObjectAMap -> stringObjectAMap.entrySet())
.flatMapIterable(entries -> entries)
.map(e -> new AbstractMap.SimpleEntry<>(e.getKey(), e.getValue().a))
.toMap(e -> e)
.subscribe(m -> {
//do something with map
});
Observable.just(地图)
.map(stringObjectAMap->stringObjectAMap.entrySet())
.flatMapIterable(条目->条目)
.map(e->new AbstractMap.SimpleEntry(e.getKey(),e.getValue().a))
.toMap(e->e)
.订阅(m->{
//用地图做点什么
});
这也可以使用java8流来完成:
import java.util.HashMap;
import java.util.Map;
import static java.util.stream.Collectors.toMap;
public class Example {
public void method() {
Map<String, Object> map = new HashMap<String, Object>() {{
put("a", 4);
put("b", new Object());
put("c", 'o');
}};
Map<String, String> stringMap = map.entrySet()
.stream()
.collect(toMap(Map.Entry::getKey, entry -> entry.getValue().toString()));
}
}
import java.util.HashMap;
导入java.util.Map;
导入静态java.util.stream.Collectors.toMap;
公开课范例{
公开作废法(){
Map Map=newhashmap(){{
放入(“a”,4);
放置(“b”,新对象());
put(“c”,“o”);
}};
Map stringMap=Map.entrySet()
.stream()
.collect(toMap(Map.Entry::getKey,Entry->Entry.getValue().toString());
}
}
我不明白这个问题。您将如何在PlanJava中实现这一点?我将完全按照第一条注释的说明来实现。但是我正在寻找合适的RxJava操作符,如果有的话。是否可以合并FlatMapiteTable和map部分(例如,FlatMapiteTable(stringObjectAMap->stringObjectAMap.entrySet())?对于后续的map/toMap操作符也是一样吗?@JohnMcClean,是的,你是对的。但是为了清晰起见,我想把每个步骤都分离出来。这有助于我理解数据流是如何进行转换的。flatmapetable(entries->entries)
可以替换为。flatMap(Observable::from)
.map(stringObjectAMap->stringObjectAMap.entrySet()).FlatMapetable(条目->条目)
可以替换为.FlatAsObservable(Map::entrySet)
hey.谢谢你友好的回答:p正如问题中所述,我正在寻找使用Rx操作符的Rx方式。我知道如何使用java方式
import java.util.HashMap;
import java.util.Map;
import static java.util.stream.Collectors.toMap;
public class Example {
public void method() {
Map<String, Object> map = new HashMap<String, Object>() {{
put("a", 4);
put("b", new Object());
put("c", 'o');
}};
Map<String, String> stringMap = map.entrySet()
.stream()
.collect(toMap(Map.Entry::getKey, entry -> entry.getValue().toString()));
}
}