2015-08-29 11 views
9

Yinelenen öğeleri bastırmak istediğim bir nesne koleksiyonum var. Ben Distinct operatör hakkında biliyorum, ama eğer ben yanlış değilse, uygun bir şekilde geçersiz kılınan hashcode yöntemi ile öğeleri karşılaştırın. Ama eğer benim hash kodu aynı nesneler için farklı değerler döndürürse ve eşitliği kendi başıma kurmak isterse. Farklı 2 aşırı yüklü yöntemleri var - biri param olmaksızın ve bir Func1 param ile bir, ben 2. yöntemi kullanmalıyım, ama ne kadar kusurlu olduğunu varsayalım?RXJava'da gözlemlenebilir tarafından kopyalanan yinelenen değerler nasıl filtrelenir?

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

cevap

20

.

bir Func1 ile distinct sürümü size ayrı olmak istiyorum şey haline nesneyi dönüştürmek için (ama tutarlı equals ve hashcode yöntemleri uygulamalıdır) verir. Varsayalım

Ben bir Observable<Person>Person böyle olduğu:

persons.distinct(person -> person.firstName).count(); 
:

class Person { 
    String firstName; 
    String lastName; 
} 

Sonra bu yapabileceğini ayrı adlar sayısını saymak için

0

En basit yoldan emin değilseniz, ancak azaltma ile yapabilirsiniz. Azaltmanın bir koleksiyonu ve bir eylemi vardır. Eylem içinde öğeleri koleksiyona kendiniz eklemekle yükümlü olursunuz. Orada istediğiniz mantığı yapabilir ve şartlı olarak öğeleri koleksiyona ekleyebilirsiniz. nedeniyle distinct operatörü HashSet kullanır yorganın altında sen distinct() kullanabilmek için için nesne üzerinde tutarlı equals() ve hashcode() yöntemlerini olması gerektiğini doğru Yep

İlgili konular