I have a collection of objects, where i want to suppress duplicate items. I know about Distinct operator, but if i am not mistaken it compare items by properly overrided hashcod
Yep you are right that you need to have consistent equals()
and hashcode()
methods on your object to be able to use distinct()
because under the covers the distinct
operator uses a HashSet
.
The version of distinct
with a Func1
allows you to convert the object into something that you want to be distinct (but must implement consistent equals
and hashcode
methods).
Suppose I have an Observable<Person>
where Person
is like this:
class Person {
String firstName;
String lastName;
}
Then to count the number of distinct first names I could do this:
persons.distinct(person -> person.firstName).count();
Not sure if simplest way but you can do it with reduce. Reduce takes a collection and an action. Within the action you are responsible for adding the elements to the collection yourself. There you can do whatever logic you'd like and conditionally add elements to the collection.