2016-02-02 23 views
5

Bazı karşılaştırıcılara göre toplama filtrelemesinin alt kümesini almak mümkün mü ve üst koleksiyondaki tüm alt sürümleri ve alt kümeleri tüm değişiklikleri alıyor mu?Karşılaştırıcı kullanılarak ayarlanan alt kümeyi alın

+0

Koleksiyonunuza bir çeşit 'tetikleyici' eklemek mi istiyorsunuz? –

+1

Bunun bir çeşit gözlemlenebilir arabirim uygulamak zorunda olacağından, düzenli bir koleksiyon için bunun mümkün olduğunu düşünmüyorum. Ya bu, ya da orijinal koleksiyonda bir şey değiştiğinde her öğeyi her seferinde test etmeniz gerekiyor. –

+1

'NavigableSet.subSet()' yapmak istediğiniz şeyi yapar mı? –

cevap

3

NavigableSet.subSet() numaralı telefondan arama yapmak istediğiniz şeyi yapabilir. NavigableSet, temel kümenin "görünümleri" olan alt kümeleri oluşturma yeteneğine sahip sıralanmış kümedir. Bu görünümler, sağladığınız değerlerle kümenin oluşturulmasında sağlanan Comparator veya değerlerin doğal sırasını kullanarak sınırlanır. En yaygın uygulama TreeSet'dur. Örneğin, bunu yapabilirsiniz: beklediğiniz gibi

NavigableSet<String> set = new TreeSet<>(
     Arrays.asList("b", "e", "a", "d", "c")); 
    System.out.println(set); 

sonuç [a, b, c, d, e] olduğunu. Şimdi kapsayıcı "d" ile "b" den, örneğin bir alt kümesini oluşturabilirsiniz:

İşte
NavigableSet<String> set2 = set.subSet("b", true, "d", true); 
    System.out.println(set2); 

çıkış [b, c, d] olduğunu. Eğer hem içinde hem de dışında sınırların orijinal kümesine bazı unsurlar eklemek Şimdi, eğer alt küme görünümü değişiklikleri içine eklendiğini yalnızca ne dahil etmek:

set.add("a1"); 
    set.add("c1"); 
    set.add("e1"); 
    System.out.println(set2); 

çıkış [b, c, c1, d] olduğunu.

+0

Tamam, ve istediğim, "b" 'den "d"' ye kadar değil, her saniyede beni seçen bazı karşılaştırıcılara göre alt-set oluşturmaktır. Sürekli olmayanı seçmenin zor olduğunu varsayarsak, böyle bir genel iletişimci yoktur. Ama eğer TreeSet, yani öğeleri tek ve çift olarak bölen bir karşılaştırıcıya sahipse. Bu karşılaştırıcıyı kullanarak birinci veya ikinci alt seti istiyorum. – userbb

+0

@userbb Tamam, TreeSet karşılaştırıcısının istediğini yapabileceğini düşünmüyorum. Karşılaştırıcı, kümedeki tüm öğelerin * toplam sırasını * belirler ve oluşturma zamanında oluşturulan kümenin sabit bir özelliğidir. Örneğin, bir sorgu işleminde onu ayarlayamazsınız. Bir yüklemeyle bir filtre gibi daha fazla bir şeye ihtiyacınız olduğu gibi geliyor, ama kullanım durumunuzu daha ayrıntılı bir şekilde açıklamanız gerektiğini düşünüyorum. Ben ve diğerleri biraz tahmin ediyorlar. –

İlgili konular