我知道如何变换Map
但是我想学习如何使用RxJava实现它。
更具体地说:
//Input:
Map<String,String> in; // map from key to a string number, for example: "10"
//transform: in -> out
//Output:
Map<String,Integer> out; //map from the same key to Integer.parseInt(val) (invariant: val is a string number)
您可以使用Observable。toMap
。
我认为这是一个最小的例子:
Map<String, String> test = new HashMap<String, String>() {
{
put("1", "1");
put("2", "2");
}
};
Map<String, Integer> res = Observable.from(test.entrySet()).toMap(e -> e.getKey(), e -> Integer.parseInt(e.getValue())).toBlocking().first();
我认为Dávid Karnok在某种意义上是正确的,如果你的唯一目标是转换一个地图,那么RxJava并不是特别有用。如果你有(多个)地图的可观察性,这可能更有意义。
然后我建议使用方便的番石榴变压器:https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/Maps.html#transformValues(java.util.Map、com.google.common.base.Function)
Map<String,String> source1 = ...
Map<String,String> source2 = ...
Observable.just(source1, source2)
.map(map->Maps.transformValues(map, v->Integer.parseInt(v)));
Guava的map value transformer的一个优点是,它不会重新创建地图数据结构,而是创建一个转换视图,该视图可以懒洋洋地(动态地)映射值。
如果您不想依赖番石榴,您可以简单地实现Func1
假设我有一个Foo对象列表。Foo上有一个属性,我必须使用它从数据源中获取Bar对象。然后我必须将每个bar对象映射回我得到bar的原始Foo对象。 我的尝试如下:
我需要将Java转换为的实例(包括映射内容) 我应该用什么来代替来使此代码可编译?
我刚刚开始看Java8,为了尝试lambdas,我想我应该尝试重写我最近写的一个非常简单的东西。我需要将一个字符串到列的映射转换为另一个字符串到列的映射,其中新映射中的列是第一个映射中列的防御副本。列具有复制构造函数。到目前为止我得到的最接近的数据是: 但我相信一定有更好的方法来做这件事,我会很感激一些建议。
1)做这件事的正确方法是什么?我做错了什么? 2)流是线程安全的吗?我正在多线程环境中工作,所以我是否应该使用返回TRAAD安全集合的收集器?
我正在从文件中读取值并获取列表。如下- 一旦我得到这个
我有4张桌子: 库存(库存ID、可用数量) 一个客户可以有多个订单,而一个订单由多个orderDetails项目组成。我正在尝试将库存项目存储在由库存项目和数量整数组成的映射中。 当我尝试以这种方式持久化它时,第一个库存项目将以1的orderID添加到Order详细信息表中。但是下一个是使用2的orderID插入的(不存在)。 有什么帮助吗?