2012-04-11 12 views
29

Sto cercando un metodo statico nelle librerie di base Java o qualche altra dipendenza di uso comune - preferibilmente uno di Apache - che fa la seguente:metodo di utilità per il confezionamento di un oggetto in una collezione

public static <T> Collection<T> wrap(final T object){ 
    final Collection<T> collection = new ArrayList<T>(); 
    collection.add(object); 
    return collection; 
} 

Do sai dove esiste già un tale metodo? Dal momento che immagino che il problema sia comune, non voglio duplicare la sua soluzione.

risposta

55

java.util.Collections.singleton(object) ti darà un immutabile Set. singletonList è anche disponibile.

meno efficiente java.util.Arrays.asList(object) vi darà una mutabile (può usare list.set(0, x);), ma non strutturalmente variabile (non si può aggiungere o rimuovere) List. È un po 'più costoso in quanto esiste una matrice aggiuntiva creata sul lato client.

+0

C'è anche '' 'Collections.singletonList (oggetto)' ''. – drindt

1

Non aver paura di scrivere qualcosa da solo. Per quanto ne so, non esiste. Penso che un motivo per questo è che il metodo di utilità decide quale implementazione della raccolta che utilizza. Nel tuo caso hai scelto per ArrayList, ma ci sono un sacco di altre collezioni.

2

Immutable list in guava

public static <E> ImmutableList<E> of(E element) 

Restituisce una lista immutabile che contiene un singolo elemento. Questo elenco si comporta e si comporta in modo comparabile a Collections.singleton (T), ma non accetta un elemento nullo. È preferibile principalmente per coerenza e manutenibilità del codice.

+0

Grazie per il suggerimento, ma sfortunatamente non posso usare Guava. –

1

java.util.Collections.singletonList() o singleton(). Nota comunque che il risultato è immutabile.

9

Ecco alcuni modi efficaci per deformare oggetto Java (s) in Elenco, come di Java 8.

Raccolte. singletonList: Elemento singolo, immutabile, dal 1.3.
Collections.singletonList(object)
Prestazioni elevate supportate dalla classe interna.

Collezioni. nCopies: un oggetto, zero a molti articoli, immutabile, dal 1.2.
Collections.nCopies(number_of_copy, object)
Prestazioni elevate supportate dalla classe interna. Tutti gli oggetti puntano allo stesso oggetto.

Matrice. asList: Qualsiasi numero di oggetti, dimensioni immutabili (elementi singoli modificabili), dal 1.2.
Arrays.asList(object1, object2, object3)
Sostenuto dalla classe interna. Gli elementi vengono convertiti nell'array at compile time e questo array arretra direttamente all'elenco.

nuovo ArrayList(Collection): qualsiasi numero di oggetti, mutevole, dal 1.2
new ArrayList<>(Arrays.asList(object1, object2, object3))
L'ArrayList viene creato con un array clone e uno array copy, pertanto non utilizza alcun loop.

Problemi correlati