Saltar al contenido

¿Cómo crear una lista inmutable en java?

Solución:

Una vez que tu beanList se ha inicializado, puede hacer

beanList = Collections.unmodifiableList(beanList);

para hacerlo inmodificable. (Ver colección inmutable vs no modificable)

Si tiene métodos internos que deberían poder modificar la lista y métodos públicos que no deberían permitir la modificación, le sugiero que lo haga

// public facing method where clients should not be able to modify list    
public List<Bean> getImmutableList(int size) {
    return Collections.unmodifiableList(getMutableList(size));
}

// private internal method (to be used from main in your case)
private List<Bean> getMutableList(int size) {
    List<Bean> beanList = new ArrayList<Bean>();
    int i = 0;

    while(i < size) {
        Bean bean = new Bean("name" + i, "address" + i, i + 18);
        beanList.add(bean);
        i++;
    }
    return beanList;
}

(Tu Bean los objetos ya parecen inmutables).


Como nota al margen: si está utilizando Java 8+, su getMutableList se puede expresar de la siguiente manera:

return IntStream.range(0,  size)
                .mapToObj(i -> new Bean("name" + i, "address" + i, i + 18))
                .collect(Collectors.toCollection(ArrayList::new));

Usar Collections.unmodifiableList(). Pasas tu original ArrayList y devuelve una lista que arroja una excepción si intenta agregar, eliminar o cambiar elementos. Por ejemplo, use return Collections.unmodifiableList(beanList); en lugar de return beanList; al final de getImmutableList(). main() lanzará una excepción. los Collections La clase tiene métodos para todos los otros tipos de colecciones comunes además de List así como.

En JDK 8:

List<String> stringList = Arrays.asList("a", "b", "c");
stringList = Collections.unmodifiableList(stringList);

En JDK 9:

List stringList = List.of("a", "b", "c");

referencia

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *