2012-04-11 11 views
29

Busco un método estático en las bibliotecas del núcleo de Java o alguna otra dependencia de uso común - de preferencia uno de Apache - que hace lo siguiente:método de utilidad para envolver un objeto en una colección

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

Do ¿Sabes dónde existe ese método? Como supongo que el problema es común, no quiero duplicar su solución.

Respuesta

55

java.util.Collections.singleton(object) le dará un Set inmutable. singletonList también está disponible.

menos eficientemente java.util.Arrays.asList(object) le dará una mutable (se puede utilizar list.set(0, x);), pero no estructuralmente modificable (no se puede agregar o quitar) List. Es un poco más caro, ya que hay una matriz adicional que se crea en el lado del cliente.

+0

También hay '' 'Collections.singletonList (object)' ''. – drindt

1

No tengas miedo de escribir algo tú mismo. Hasta donde yo sé, no existe. Creo que una razón para esto es que el método de utilidad decide qué implementación de Collection usa. En su caso, eligió ArrayList, pero hay muchas otras colecciones.

2

Immutable list in guava

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

Devuelve una lista inmutable que contiene un solo elemento. Esta lista se comporta de manera comparable a Collections.singleton (T), pero no aceptará un elemento nulo. Es preferible principalmente para la coherencia y el mantenimiento de su código.

+0

Gracias por la pista, pero desafortunadamente no puedo usar guayaba. –

1

java.util.Collections.singletonList() o singleton(). Sin embargo, tenga en cuenta que el resultado es inmutable.

9

Estas son algunas formas eficientes para deformar un objeto Java (s) en la lista, a partir de Java 8.

Colecciones. singletonList: Artículo único, inmutable, desde 1.3.
Collections.singletonList(object)
Alto rendimiento respaldado por la clase interna.

Colecciones. nCopies: Un objeto, cero a muchos elementos, inmutables, desde 1.2.
Collections.nCopies(number_of_copy, object)
Alto rendimiento respaldado por la clase interna. Todos los elementos apuntan al mismo objeto.

Array. asList: Cualquier número de objetos, tamaño inmutables (elementos individuales mutables), desde 1.2.
Arrays.asList(object1, object2, object3)
Respaldado por la clase interna. Los elementos se convierten a la matriz at compile time y esta matriz respalda directamente la Lista.

nuevo ArrayList(Collection): Cualquier número de objetos, mutable, desde 1.2
new ArrayList<>(Arrays.asList(object1, object2, object3))
ArrayList se crea con array clone y array copy, por lo que no utiliza ningún bucle.

Cuestiones relacionadas