È possibile ottenere un sottoset del filtro di raccolta da parte di un comparatore e ogni aggiornamento sulla raccolta principale e i suoi sottogruppi ottengono tutte le modifiche?Ottieni sottoset del set utilizzando il comparatore
risposta
La chiamata NavigableSet.subSet()
potrebbe fare ciò che si desidera. NavigableSet
è un set ordinato che ha la capacità di creare sottoinsiemi che sono "viste" del set sottostante. Queste viste sono limitate dai valori forniti dall'utente, utilizzando lo Comparator
fornito alla creazione del set o l'ordine naturale dei valori. L'implementazione più comune è TreeSet
. Ad esempio, si può fare questo:
NavigableSet<String> set = new TreeSet<>(
Arrays.asList("b", "e", "a", "d", "c"));
System.out.println(set);
Il risultato è [a, b, c, d, e]
come ci si aspetterebbe. Ora è possibile creare un sottoinsieme, ad esempio da "B" a "D" inclusivo:
NavigableSet<String> set2 = set.subSet("b", true, "d", true);
System.out.println(set2);
Qui l'uscita è [b, c, d]
. Ora, se si aggiungono alcuni elementi per la serie originale che sono sia all'interno che all'esterno dei confini, la vista cambia sottoinsieme per includere solo ciò che è stato aggiunto all'interno:
set.add("a1");
set.add("c1");
set.add("e1");
System.out.println(set2);
l'uscita è [b, c, c1, d]
.
Ok, e quello che voglio è creare il subSet non con il fornire da "b" a "d", ma con qualche comparatore che sottoset seleziona per me ogni secondo. Presumo che selezionare non continuo sia difficile, quindi non esiste un contenitore generico. Ma se TreeSet ha un comparatore che divide elementi su i.e dispari e pari. Voglio subSet prima parte o secondo con l'uso di tale comparatore. – userbb
@userbb OK, non penso che il comparatore di TreeSet possa fare quello che vuoi. Il comparatore stabilisce un * ordine totale * di tutti gli elementi dell'insieme ed è una proprietà fissa dell'insieme, stabilita al momento della creazione. Ad esempio, non è possibile impostarlo all'interno di un'operazione di query. Sembra che tu abbia bisogno di qualcosa di più simile a un filtro con un predicato, ma penso che tu debba spiegare più dettagliatamente il tuo caso d'uso. Io e altri stiamo facendo un bel po 'di ipotesi. –
- 1. Utilizzando comparatore per STL set
- 2. È possibile cambiare il comparatore di un C++ std :: set?
- 3. Come ottenere l'elenco da Set e Comparatore
- 4. Java TreeMap (comparatore) e ottenere il metodo ignorando il comparatore
- 5. Ottieni la chiave del dizionario utilizzando il valore del dizionario
- 6. comparatore con il doppio tipo
- 7. Utilizzando memcache.add() al posto del set()
- 8. Come utilizzare correttamente il comparatore Java?
- 9. uso del metodo equals() nell'interfaccia comparatore? Il metodo
- 10. ordinamento groovy con sintassi del comparatore
- 11. Ottieni l'abbreviazione del fuso orario utilizzando il valore di offset
- 12. Ottieni il nome del file dall'URL utilizzando Lua
- 13. Ottieni la versione del browser utilizzando il selettore web selenio
- 14. comparatore vs Apache BeanComparator
- 15. Comparatore mappatura null-safe utilizzando le implementazioni predefinite
- 16. Ottieni tutti i membri in Set ordinato
- 17. Ottieni il titolo di lavoro utilizzando System.DirectoryServices.AccountManagement
- 18. Elenco :: contiene con comparatore
- 19. Come si ordina un elenco generico utilizzando un comparatore personalizzato?
- 20. problema di ordinamento utilizzando la funzione membro come comparatore
- 21. Perché il mio semplice comparatore è rotto?
- 22. Perché il comparatore si dichiara uguale?
- 23. come testare il comparatore al test junit
- 24. Set Window.Owner utilizzando hWnd
- 25. Comparatore analogico AVR + Pullup interno?
- 26. Comparatore Java TreeMap
- 27. Java: Paragonabile vs comparatore
- 28. Comparatore lambda multilinea
- 29. Come si usa il comparatore con is_transparent type?
- 30. Ottieni il nome del metodo corrente
Si intende aggiungere una sorta di "trigger" alla raccolta, che filtra gli elementi aggiunti all'elenco? –
Non penso che sia possibile farlo per una raccolta regolare, poiché la classe dovrebbe implementare una sorta di interfaccia osservabile. O quello, o devi testare ogni elemento ogni volta nel caso in cui qualcosa sia cambiato nella collezione originale. –
'NavigableSet.subSet()' fa quello che vuoi? –