¿Cómo reordenar una lista de objetos?

En primer lugar, esto va a sonar como tarea, pero no lo es. Solo un problema que estoy tratando de resolver en el trabajo.

Tengo una lista de objetos, los objetos tienen un número de secuencia que indica su orden en la lista en la interfaz de usuario. Ejemplo:

public class Task {
  Long id;
  String name;
  Long seq;
}

La tabla en mi interfaz de usuario tiene enlaces "arriba" y "abajo" en cada fila de la tabla para mover las tareas hacia arriba y hacia abajo en la lista.

Estoy implementando dos métodos para manejar el reordenamiento. Estos métodos son llamados por ajax en la interfaz de usuario web.

public void incTaskSeq(List<Task> allTasks, Task taskToMove)

Por ejemplo; si tengo t1.seq = 1, t2.seq = 2, t3.seq = 3, t4.seq = 4, t5.seq = 5 y quiero incrementar el lugar de t3, entonces t3.seq se convierte en 4, y t4.seq debe convertirse en 3.

public void decTaskSeq(List<Task> allTasks, Task taskToMove)

Similar; si tengo t1.seq = 1, t2.seq = 2, t4.seq = 3, t3.seq = 4, t5.seq = 5 y quiero disminuir el lugar de t4, entonces t4.seq se convierte en 2, y t2.seq debe convertirse en 3. Resultando en:

t1.seq = 1, t4.seq = 2, t2.seq = 3, t3.seq = 4, t5.seq = 5

Estoy un poco atrapado en la mejor manera de hacer esto.

Estaba pensando en poner todas las tareas en un HashMap y luego ordenar el mapa por el número de secuencia. Luego ubique taskToMove en el mapa, cambie el número de secuencia y luego cambie todas las secuencias de tareas afectadas.

Pero este enfoque parece poco elegante. ¿Alguien tiene alguna idea de cómo debo hacer esto?

Gracias Rob

Respuesta 1

Implemente un Comparatorpara cada criterio que desee ordenar.

Cree un nuevo Collectionobjeto ordenado (tal vez un TreeSet) pasándolo al Comparador necesario. Hacer .addTodos los objetos.

Respuesta: 2

Use una lista doblemente vinculada e intercambie los números de secuencia cuando mueva un elemento.

Respuesta: 3

Queremos subir varios archivos a Google Cloud Storage. Actualmente, estamos cargando uno por uno utilizando la API de Google Java. El código está debajo: public void uploadFile (File srcFile, String bucketName, ...

Quiero usar la conciencia de esquema de saxon sin desintegrar basex que ya se usa en nuestra base de código. ¿Hay alguna manera de reemplazar el procesador baseX Xquery con el esquema Xquery de saxon ...

Mi problema es este: me acabo de mudar a un nuevo entorno de trabajo con una red muy lenta y muy limitada. Me estoy conectando a Apache Tomcat y recibo un bit de JSON codificado en cadena (<200 ...

Realmente no sé nada sobre la administración de la memoria de Java, así que esto es completamente mi culpa, solo necesito señalar en la dirección de una solución. Estoy trabajando con un gran conjunto de datos. Tengo un método que ...