¿Existe un método de utilidad en Java que genere una lista o matriz de una longitud especificada con todos los elementos iguales a un valor especificado (por ejemplo, ["foo", "foo", "foo", "foo", "foo"])?
82
Puede utilizar Collections.nCopies
. Tenga en cuenta que esto copia la referencia al objeto dado, no al objeto en sí. Si está trabajando con cadenas, no importará porque de todos modos son inmutables.
List<String> list = Collections.nCopies(5, "foo");
System.out.println(list);
[foo, foo, foo, foo, foo]
Para una matriz, puede usar Arrays.fill (Object [] a, Object val)
String[] strArray = new String[10];
Arrays.fill(strArray, "foo");
y si necesitas una lista, usa
List<String> asList = Arrays.asList(strArray);
Entonces tengo que usar dos líneas: String [] strArray = new String [5]; Arrays.fill (strArray, "foo") ;. ¿Existe una solución de una línea?
Puede usar Collections.nCopies (5, "foo") como una solución de una línea para obtener una lista:
List<String> strArray = Collections.nCopies(5, "foo");
o combinarlo con toArray
para obtener una matriz.
String[] strArray = Collections.nCopies(5, "foo").toArray(new String[5]);
String[] strArray = new String[5]; Arrays.fill(strArray, "foo");
. ¿Existe una solución de una sola línea?Versión que puede utilizar para matrices primitivas (Java 8):
DoubleStream.generate(() -> 123.42).limit(777).toArray(); // returns array of 777 123.42 double vals
Tenga en cuenta que vuelve
double[]
, noDouble[]
Funciona para IntegerStream, DoubleStream, LongStream
fuente
Con
IntStream
, puede generar un rango de números enteros, asignarlos al elemento que desee y recopilarlo como una lista.List<String> list = IntStream.rangeClosed(0, 5) .mapToObj(i -> "foo") .collect(Collectors.toList());
O como una matriz
String[] arr = IntStream.rangeClosed(0, 5) .mapToObj(i -> "foo") .toArray(String[]::new);
fuente
Si su objeto no es inmutable o no tiene una referencia transparente, puede usar
Stream.generate(YourClass::new).limit(<count>)
y recógelo para listar
o a la matriz
.toArray(YourClass[]::new)
fuente