Creando una lista con elemento repetido


82

¿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"])?

Respuestas:


144

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]

20

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]);

1
Entonces tengo que usar dos líneas: String[] strArray = new String[5]; Arrays.fill(strArray, "foo");. ¿Existe una solución de una sola línea?
— laurt

Muy simple: Collections.nCopies (5, "foo") Thkns!
— Marcelo Rebouças

4

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


1

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);

1

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

.collect(Collectors.toList())

o a la matriz

.toArray(YourClass[]::new)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.