如何过滤第二个 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 解决方案。