java - objetos - Cómo crear de forma rápida y conveniente un arraylist de un elemento
metodos arraylist java (8)
List
tamaño fijo
La forma más fácil, que yo sepa, es crear una List
elementos únicos de tamaño fijo con Arrays.asList(T...)
como
// Returns a List backed by a varargs T.
return Arrays.asList(s);
List
tamaños variables
Si necesita variar en tamaño, puede construir un ArrayList
y la List
tamaño fijo como
return new ArrayList<String>(Arrays.asList(s));
y (en Java 7+) puede usar el operador diamante <>
para hacer que
return new ArrayList<>(Arrays.asList(s));
Esta pregunta ya tiene una respuesta aquí:
- Inicialización de un ArrayList en una línea 30 respuestas
¿Hay algún método de utilidad que pueda hacer esto en 1 línea? No puedo encontrarlo en ninguna parte en Collections
o List
.
public List<String> stringToOneElementList(String s) {
List<String> list = new ArrayList<String>();
list.add(s);
return list;
}
No quiero reinventar la rueda a menos que planee ponerle llantas elegantes.
Bueno ... el tipo puede ser T
, y no String
. Pero usted consigue el punto. (con todas las comprobaciones nulas, controles de seguridad ... etc)
Al ver que la guayaba recibe una mención, pensé que también sugeriría Eclipse Collections (anteriormente conocida como GS Collections).
Todos los ejemplos siguientes devuelven una List
con un solo elemento.
Lists.mutable.of("Just one item");
Lists.mutable.with("Or use with");
Lists.immutable.of("Maybe it must be immutable?");
Lists.immutable.with("And use with if you want");
Existen métodos similares para otras colecciones.
Con Java 8 Streams:
Stream.of(object).collect(Collectors.toList())
o si necesitas un set:
Stream.of(object).collect(Collectors.toSet())
Las otras respuestas utilizan Arrays.asList()
, que devuelve una lista no modificable Arrays.asList()
UnsupportedOperationException
si intenta agregar o eliminar un elemento). Para obtener una lista mutable, puede ajustar la lista devuelta en una nueva ArrayList
como indican un par de respuestas, pero una solución más limpia es usar Guava''s Lists.newArrayList() Guava''s Lists.newArrayList() (disponible desde al menos Guava 10 , lanzada en 2011).
Por ejemplo:
Lists.newArrayList("Blargle!");
Muy simple:
Arrays.asList("Hi!")
Otra alternativa más es la inicialización de doble refuerzo , por ejemplo,
new ArrayList<String>() {{ add(s); }};
pero es ineficiente y oscuro . Por lo tanto sólo es adecuado:
- en el código que no le importa las fugas de memoria, como la mayoría de las pruebas unitarias y otros programas de corta duración;
- y si ninguna de las otras soluciones se aplica, lo que creo que implica que has desplazado hasta aquí buscando poblar un tipo diferente de contenedor que el ArrayList en la pregunta.
Puede usar el método de utilidad Arrays.asList
y Arrays.asList
ese resultado a una nueva ArrayList
.
List<String> list = new ArrayList<String>(Arrays.asList(s));
Otras opciones:
List<String> list = new ArrayList<String>(Collections.nCopies(1, s));
y
List<String> list = new ArrayList<String>(Collections.singletonList(s));
- Constructor
ArrayList(Collection)
. -
Arrays.asList
método. -
Collections.nCopies
método de lasCollections.nCopies
. - Método
Collections.singletonList
.
Con Java 7+, puede usar el "operador de diamante", reemplazando la new ArrayList<String>(...)
con la new ArrayList<>(...)
.
Java 9
Si está utilizando Java 9+, puede usar el método List.of
:
List<String> list = new ArrayList<>(List.of(s));
Independientemente del uso de cada opción anterior, puede optar por no usar el new ArrayList<>()
envoltorio new ArrayList<>()
si no necesita que su lista sea mutable.
Collections.singletonList(object)
La lista creada por este método es inmutable.