如何过滤第二个 Observable?
How to filter againts a second Observable?
说我有一个 Observable<String> names;
然后是第二个 Observable<String> bannedNames;
是否可以过滤 names
那些不在被禁止的可观察对象中的内容?
目前我正在将禁止名称转换为列表,然后执行包含;
names.filter(n -> !bannedNamesList.contains(n));
有更好的方法吗?
快到了。为了提高效率,您真的应该将被禁止的名称放入 HashSet 而不是 List 中。用 rxjava 惯用地做这一切有点繁琐而且可读性不强,可能看起来像这样:
Observable<String> names = Observable.just("fred", "dave", "sal");
Observable<Set<String>> banned = Observable.just("sal", "joe")
.toList()
.map(list -> new HashSet<String>(list))
.cache();
Observable<String> okNames =
names.flatMap(name ->
banned.exists(set -> set.contains(name))
.filter(b -> !b)
.map(b -> name));
所以我想说比您当前的方法更好的方法是使用 HashSet 而不是列表,而不是使用惯用的 rxjava 解决方案。
说我有一个 Observable<String> names;
然后是第二个 Observable<String> bannedNames;
是否可以过滤 names
那些不在被禁止的可观察对象中的内容?
目前我正在将禁止名称转换为列表,然后执行包含;
names.filter(n -> !bannedNamesList.contains(n));
有更好的方法吗?
快到了。为了提高效率,您真的应该将被禁止的名称放入 HashSet 而不是 List 中。用 rxjava 惯用地做这一切有点繁琐而且可读性不强,可能看起来像这样:
Observable<String> names = Observable.just("fred", "dave", "sal");
Observable<Set<String>> banned = Observable.just("sal", "joe")
.toList()
.map(list -> new HashSet<String>(list))
.cache();
Observable<String> okNames =
names.flatMap(name ->
banned.exists(set -> set.contains(name))
.filter(b -> !b)
.map(b -> name));
所以我想说比您当前的方法更好的方法是使用 HashSet 而不是列表,而不是使用惯用的 rxjava 解决方案。