/ / Java: ordene una lista no modificable - java, lista, clasificación, colecciones

Java: ordena una lista no modificable: java, list, sorting, collections

¿Cómo uno haría esto?

He intentado crear una nueva lista vacía, luego copiarle los elementos de la lista no modificable, pero obtengo un error de operación no compatible.

Cualquier ayuda es apreciada.

Respuestas

21 para la respuesta № 1

¿Estás creando una lista vacía usando Collections.emptyList()? Si es así, esa también es una lista no modificable y esa puede ser la fuente de su problema.

Cree una nueva lista utilizando el constructor para su implementación de lista, como new ArrayList(). Puede pasar la lista original al constructor o, si no, utilizar el addAll() método.


38 para la respuesta № 2

FWIW, con colecciones de google es de una sola línea:

List<Foo> sorted = Ordering.natural().sortedCopy(unmodifiableList);

34 para la respuesta № 3
    List unmodifiableList = Collections.unmodifiableList(list);

List newList = new ArrayList(unmodifiableList);

Collections.sort(newList);

El constructor de ArrayList toma una lista existente, lee sus elementos (¡sin modificarlos!) y los agrega a la nueva Lista.


8 para la respuesta № 4

En Java 8, puede utilizar la API de flujos. Por ejemplo:

List<?> sortedList = unsortedList.stream().sorted().collect(Collectors.toList());

0 para la respuesta № 5

Debería funcionar como se describe. Los elementos en una lista no modificable no son modificables en sí mismos. Por supuesto, no puede ordenar una Lista no modificable, ya que tiene que reescribirse con operaciones de agregar y eliminar, y no están permitidas.

Supongo que el error está en otra parte, lo mejor sería mostrar su código :)


0 para la respuesta № 6

Voy a responder a su segunda pregunta:

No puede agregar a su lista "taskListModifiable"porque esa es una lista "no modificable", que en Java significa que es inmutable. Una lista o colección no modificable / inmutable de cualquier tipo no se puede cambiar directamente de ninguna manera: no puede agregarle elementos, eliminar elementos o cambiar referencias a elementos existentes.

Tenga en cuenta que los elementos existentes en ella lista / colección se puede cambiar si son mutables, pero las referencias a ellas de la lista no se pueden cambiar. Es decir, hasta que la lista quede completamente fuera del alcance y se recoja la basura, la lista no modificable siempre contendrá esas mismas referencias.

Ahora, en su caso, Collections.emptyList () devuelve un modificable VACÍO lista. En realidad, esta es siempre la misma instancia, ya que es inmutable y siempre está vacía. No puede agregarle debido a la regla de que una lista inmutable no se puede expandir (agregar). Como está vacío, tampoco hay nada en él que pueda cambiarse.

Debería agregar para aclarar aún más que Collection.emptyList () no crea una lista vacía. Simplemente devuelve una referencia a una instancia de lista de singleton.