linkedlist linked geeksforgeeks example español java linked-list java-7 last-modified

example - linkedlist java geeksforgeeks



Ordenando LinkedList<Archivo> según los archivos de la última modificación (4)

Sé que hay muchas preguntas similares a la mía, pero no he llegado a ninguna parte con esas respuestas (siento que me falta algo ...) Pero de todos modos:

Tengo una LinkedList. En mi programa, el usuario debería poder ordenar la lista según la última hora de modificación de los archivos.

Por ejemplo, he intentado implementar algo de acuerdo con estos dos: Encontrar los 3 últimos archivos modificados en una larga lista de archivos y ¿ Obtener archivos en un directorio ordenados por última modificación? en mi programa, pero parece que no tengo la lista ordenada de todos modos.

Para el primer enlace: ¿cuál es el trato de devolver 1, -1 o 0? ¿Realmente hace algo, o debería agregar algún código para moverlo hacia arriba o hacia abajo en la lista?

Supongo que cualquiera de esos es algo que debería usar, ¿verdad? Me preguntaba si ese código sería suficiente o si tengo que agregar algo más para hacerlo funcionar.

NÓTESE BIEN. Me gustaría crear un nuevo método, en la clase existente.

Entonces esto es lo que traté de hacer:

public static final Comparator<File> lastModified = new Comparator<File>() { @Override public int compare(File o1, File o2) { return o1.lastModified() == o2.lastModified() ? 0 : (o1.lastModified() < o2.lastModified() ? 1 : -1); } }; public void testFileSort() { File[] file = new File(".").listFiles(); Arrays.sort(file, lastModified); //a snippet to actually update what the user sees }

EDITAR Mi mayor problema (¿quizás?) Es que cuando mi método está hecho, actualiza la vista, pero no de la manera correcta: la "vieja" lista sigue siendo la misma, pero en la parte inferior hay algo que no debería ser ...

  • file1.jpg
  • file2.jpg
  • ..
  • ..
  • ..
  • imagelist.txt
  • compartimiento
  • src
  • ajustes
  • proyecto
  • classpath

(imagelist.txt es un archivo de texto donde se almacenan los imagepaths), por alguna razón esa es la lista que puedo ver después de actualizar la vista.

EDITAR 2 Archivo [] archivo = nuevo Archivo ("."). ListFiles ();

Resultado: [Ljava.io.File; @ 3e2a9a49 Así que supongo que este sería el problema REAL ...? Lo que intentaba hacer era poner los archivos de LinkedList a esta matriz, pero supongo que hice algo mal, obtuve este fragmento del primer enlace ... ¿Cuál sería la forma adecuada de hacerlo, si esto está en alguna parte? cerca de una forma correcta de ir.

Gracias de antemano, espero que mi pregunta tenga algún sentido y ustedes no me juzguen demasiado :) Sé que hice esto bastante confuso ahora ...


Resultado: [Ljava.io.File; @ 3e2a9a49 Así que supongo que este sería el problema REAL ...?

¡Lo dudo!

El resultado como [Ljava.io.File;@3e2a9a49 simplemente significa que trataste de imprimir el resultado de llamar a toString() en una matriz.

Para el primer enlace: ¿cuál es el trato de devolver 1, -1 o 0? ¿Realmente hace algo, o debería agregar algún código para moverlo hacia arriba o hacia abajo en la lista?

El punto de -1, 0, +1 es que le dice al algoritmo de ordenación si el primer argumento es "menor que", "igual que" o "mayor que" el segundo argumento. Para obtener más información, lea los javadocs de la interfaz del Comparator .

No, no debes mover los elementos mientras ordenas. Si lo hace mientras ordena la matriz, los resultados serán impredecibles.

Lo que me desconcierta es por qué piensas que esos archivos al final no deberían estar allí. Está ordenando los archivos en el directorio. Si esos archivos están en el directorio, obviamente deberían estar en la matriz ordenada y, por lo tanto, en la vista. Si no están en el directorio, entonces el problema más probable es el código que actualiza la vista ... no el código que nos mostró.


El código en su primer enlace es suficiente con solo usar una lista vinculada en lugar de una matriz de archivos. En realidad, la comparación tiene lugar dentro del comparador. Para que el comparador sea genérico, solo necesita saber si el siguiente elemento es más grande, más pequeño o más. No requiere conocer ningún detalle sobre el elemento en sí. Por lo tanto, en la función de comparación usted maneja la lógica (la última hora de modificación es anterior o no) y en función de esa información de envío a la lógica del comparador con 1, -1 o 0 para hacerle saber que es más grande, más pequeña o igual al elemento comparado. Espero que esto tenga sentido.


Hay un método file.lastModified() que devuelve long . Puede escribir su comparador personalizado dependiendo de esto.
Me gusta:

@Override public int compare(File o1, File o2) { return o1.lastModified() > o2.lastModified() ? 1 : 0; }


Los valores enteros devueltos {1, -1, 0} cuando se comparan con objetos significan mayor, menor e igual que un objeto con el que se compara. No hace nada por sí mismo, pero usted sabe si uno es más grande, más pequeño o igual que el otro.