在我的Android客户端中,我从后端接收JSON数据:
[
[
1427378400000,
553
],
[
1427382000000,
553
]
]
下面是实际加载数据的例程。我正在使用RxAndroid并在这里进行改装。
private void getProductLevels() {
Observable<List<List<Double>>> responseObservable =
mProductService.readProductLevels();
AppObservable.bindFragment(this, responseObservable)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
// TODO: Transform List<List<Double>> into List<ProductLevel>
.subscribe(new Subscriber<List<List<Double>>>() {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable e) {}
@Override
public void onNext(List<List<Double>> response) {}
});
}
如何映射内部列表
public class ProductLevel {
public Double mTimeStamp;
public Double mLevel;
public ProductLevel(Double timeStamp, Double level) {
mTimeStamp = timeStamp;
mLevel = level;
}
}
最后,我想收到这个:列表
如果您将ReadProductLevel更改为一次发出一个列表项,那么您可以一次对它们做出一个反应:
在mProductService中:
private Observable<List<Double>> readProductLevels() {
return Observable.create(
new Observable.OnSubscribe<List<Double>>() {
@Override
public void call(Subscriber<? super List<Double>> subscriber) {
List<List<Double>> items = new ArrayList<List<Double>>();
List<Double> list1 = new ArrayList<Double>() {{
add(1D);
add(2D);
}};
items.add(list1);
List<Double> list2 = new ArrayList<Double>() {{
add(10D);
add(12D);
}};
items.add(list2);
List<Double> list3 = new ArrayList<Double>() {{
add(21D);
add(22D);
}};
items.add(list3);
// Imagine the list creation above is your Json parsing
for (List<Double> list : items) {
subscriber.onNext(list);
}
subscriber.onCompleted();
}
});
}
允许您订阅超级列表中的每个项目:
private void getProductLevels() {
Observable<List<Double>> responseObservable = readProductLevels();
AppObservable.bindFragment(this, responseObservable)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
// TODO: Transform List<List<Double>> into List<ProductLevel>
.subscribe(
new Subscriber<List<Double>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Double> response) {
new ProductLevel(response.get(0), response.get(1));
}
});
}
List<ProductLevel> productLevels = new ArrayList<>();
for(List<Double> p: list) {
productLevels.add(new ProductLevel(p.get(0),p.get(1)));
}
我认为它应该有效。
根据您的数据,您将收到一个配对列表(时间戳、级别)。该对由一个仅包含2个值的列表表示。
因此,您要发出每一对,并将每一对转换为ProductLevel
。
要做到这一点,您必须flatMap您的配对列表才能发射每个配对。然后将每对映射到产品级。最后,只需构建一个包含所有发射项的列表。
(java8风格)
AppObservable.bindFragment(this, responseObservable)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMapIterable(listOfList -> listOfList) // or flatMap(l -> Observable.from(l))
.map(pair -> new ProductLevel(pair.get(0),pair.get(1))) // build ProductLevel for each pair
.toList() // build a list with all ProductLevel
.subscribe(listOfProductLevel -> /** ... **/);
问题内容: 我该如何打开一个列表,例如: 进入列表列表,例如: 即我想将有序元素分组在列表中,并将其保留在有序列表中。我怎样才能做到这一点? 谢谢 问题答案: 假设data_list的长度是三的倍数
当我试图使用ModelMapper将嵌套的java对象转换为嵌套的DTO时,我遇到了一个问题。在父DTO对象中,子DTO为null。以下是代码片段。 实体类: DTO的课程: 这是映射器代码: 输出: 输出用户DTO:UserDTO[名称=xyz,地址=null,产品=null] 在这里,我想将用户实体转换为UserDTO-dto。我得到了地址和产品DTO的空值。我在这里到底缺少什么?有人知道吗?
我在Firebase中有以下数据: 在Flutter中,我有以下两个对象: 我正在尝试将Firebase中的集合嵌套贴图转换为Flatter中的列表,但遇到了问题。在Flatter中将具有贴图字段的贴图对象转换为列表的最佳方法是什么? 我知道我在处理map对象时遇到了问题,根据我的方法,我收到了不同的错误,但通常类似于以下情况之一: 错误1:“键入“\u InternalLinkedHashMap
我正在制作一个程序,将图片转换成灰度形式,然后从灰度形式转换成公平格式。 我正在使用嵌套的for-loops来转换嵌套列表。这工作得很好,但我希望使用流来实现,如果使用流,输出会发生变化,但我认为应该得到相同的输出。我错在哪? grayPhoto是 你们有没有看到我做错了什么或者小溪应该是怎样的?
在索引位置1的输入中遇到的字符串的前半部分将被替换为字符“-”使用流我们如何执行操作? 我有上面的列表,我想用我这样做的循环将每个嵌套列表值的第一个位置替换为“-” 样本输出:[[0,-],[6,-],[0,-],[6,gh],[4,ij],[0,ab],[6,cd]] 但是任何人都可以解释如何使用流来实现同样的目标
我正在尝试将列表拆分为列表列表,其中每个列表的最大大小为4。 我想知道如何使用lambdas做到这一点。 目前我的做法如下: 更新 似乎没有一种简单的方法可以使用lambdas来拆分列表。虽然所有的答案都很受欢迎,但它们也是一个很好的例子,说明lambdas不能简化事情。