Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJava哈希映射转换_Java_Android_Hashmap_Transformation_Rx Java - Fatal编程技术网

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