gpt4 book ai didi

java - 使用 flatMap 和过滤器过滤可观察对象是否正确?

转载 作者:搜寻专家 更新时间:2023-11-01 07:54:18 25 4
gpt4 key购买 nike

用一个人为的例子来说明我的问题,我有一个复合对象类型的 Observable:

Observable<Category>

public class CategoryPayload {
public List<Category> categories;
// other meta data and getters
}
public class Category {
public Integer id;
// other meta data and getters
}

我需要根据 id 过滤掉某些类别,所以我最终会做类似的事情:

    Observable<CategoryPayload> categoryObservable = service.getCategoryPayload();
// use flatMap to transform the Observable into multiple
mSubscription.add(
categoryObservable.flatMap(new Func1<CategoryPayload, Observable<Category>>(){

public Observable<Category> call(CategoryPayload categoryPayload){
return Observable.from(categoryPayload.categories);
}
}).filter(new Func1<Category, Boolean>(){
public Boolean call(Category category){
return category.id != SOME_BANNED_CATEGORY_ID;
}

}).toList())
.subscribe(mObserver);

请原谅人为的代码。我真的只是想了解是否正确使用 RX 来展平我的可观察对象,然后按照我上面所做的方式对其进行过滤。

最佳答案

您正在使用 Rx.Observable 过滤器方法来过滤列表。这是一个反模式,因为列表是 Iterables,它是 Observable 的对偶。因此,您真正想要的是列表的过滤函数,而不是将 Iterable 转换为 Observable。

您可以使用 Guava 的集合过滤函数,或 Kotlin 的 Iterables 内置函数(需要在 Kotlin 中重写),或 Xtend 的等价于 Kotlin 的(需要在 Xtend 中重写),或编写手动突变(使用 for循环)在 Java 中。

总的来说,你会 .mapObservable<CategoryPayload>在 map 内部对 List<Category> 进行过滤.

关于java - 使用 flatMap 和过滤器过滤可观察对象是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30364352/

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