说我有Observable<String> names;
然后是第二个Observable<String> bannedNames;
是否可以使用不在禁止观察中的names
进行过滤?
目前我正在将禁止的名称转换为列表然后执行包含;
names.filter(n -> !bannedNamesList.contains(n));
有更好的方法吗?
答案 0 :(得分:1)
几乎就在那里我说。你真的应该把被禁止的名字放入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解决方案。