¿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 toArraypara 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 valsTenga 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