gpt4 book ai didi

java - 即使 range() 运算符迭代自身对应于传入的范围,如何仅发出整个列表一次

转载 作者:行者123 更新时间:2023-12-02 04:50:43 25 4
gpt4 key购买 nike

问题我有一个在调用某些 API 后来自后端的列表,我需要将该列表转换为其他类型的列表。之后,我需要将 n 个空对象添加到最终列表中。 (n 数字来自适合我的应用程序的某种逻辑。)

为了解决这个问题,我编写了以下代码:

Observable.fromIterable(snipList).map(new Function<UserSnipModel, TaskContent>() {
@Override
public TaskContent apply(UserSnipModel userSnipModel) throws Exception {
String displayName = userSnipModel.getDisplayName();
TaskContent.Fields fields = new TaskContent.Fields(userSnipModel.getId(),
displayName, userSnipModel.getUrlCall(), userSnipModel.getRemarks(), userSnipModel.isEnableCall());
Drawable icon = DrawableUtils.getDrawable(HomeActivity.this, userSnipModel.getIconName(), R.drawable.ic_diamond);
return new TaskContent(fields, icon);
}
}).toList().toObservable().flatMap(new Function<List<TaskContent>, ObservableSource<List<TaskContent>>>() {
@Override
public ObservableSource<List<TaskContent>> apply(List<TaskContent> taskContents) throws Exception {
return Observable.range(0, totalNumberOfMembers - numberOfItems).map(new Function<Integer, List<TaskContent>>() {
@Override
public List<TaskContent> apply(Integer integer) throws Exception {
taskContents.add(new TaskContent(new TaskContent.Fields("",
"", "", "", false), null));
return taskContents;
}
});
}
})
.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).safeSubscribe(new Observer<ListTaskContent>>() {
@Override
public void onSubscribe(Disposable d) {

}

@Override
public void onNext(List<TaskContent> taskContents) {
//This method is called multiple time.
}

@Override
public void onError(Throwable e) {
e.printStackTrace();
}

@Override
public void onComplete() {
}
});

当我运行这个时,onNext()被多次调用,但未按预期工作。为了解决这个问题我添加了 toList()里面flatMap()然后我得到List<List<TastContent>>这也不是预期的,因为我只需要 List<TaskContent>

我可以做什么来解决这个问题?

提前致谢。

最佳答案

我建议这个解决方案:

Observable.fromIterable(list)
.map(item -> item.concat("new")) //Converting the items in the initial list
.toList()
.flatMap(data -> Single.zip(
Single.just(data), //Mapped data set
Observable.range(0, data.size()) //Empty list generator
.map(rangeVal -> rangeVal.toString())
.toList(),
(initialList, emptyList) -> {
initialList.addAll(emptyList); //Appending lists
return initialList;
}
)
)
.subscribe(data -> {}, error -> {});

关于java - 即使 range() 运算符迭代自身对应于传入的范围,如何仅发出整个列表一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56444695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com