如何过滤RXJava中observable发出的重复值?

Les*_*ter 17 java distinct rx-java

我有一组对象,我想要压制重复的项目.我知道Distinct运算符,但如果我没有弄错,它通过正确覆盖的哈希码方法比较项目.但是,如果我的hashcode为相同的对象返回不同的值,并且我想通过我自己设置相等性.distinct有2个重载方法 - 一个没有params,一个有Func1 param,我想我应该使用第二种方法,但是如何exaclty?

    .distinct(new Func1<ActivityManager.RunningServiceInfo, Object>() {
                        @Override
                        public Object call(ActivityManager.RunningServiceInfo runningServiceInfo) {
                            return null;
                        }
                    })
Run Code Online (Sandbox Code Playgroud)

Dav*_*ten 29

是的,你是正确的,你需要有一致equals()hashcode()方法,你的对象上能够使用distinct()的被窝里,因为distinct操作员使用HashSet.

distinct带有a 的版本Func1允许您将对象转换为您想要区分的对象(但必须实现一致equalshashcode方法).

假设我有一个这样的Observable<Person>地方Person:

class Person {
    String firstName;
    String lastName;
}
Run Code Online (Sandbox Code Playgroud)

然后计算我可以做到的不同名字的数量:

persons.distinct(person -> person.firstName).count();
Run Code Online (Sandbox Code Playgroud)