¿Cómo aleatorizar dos ArrayLists de la misma manera?

Resuelto Jessy asked hace 13 años • 9 respuestas

Tengo dos listas filelistde matrices imgListrelacionadas entre sí, por ejemplo, "H1.txt" relacionadas con "e1.jpg". ¿ Cómo aleatorizar automáticamente la lista de imgListacuerdo con la aleatorización de fileList? Como en Excel, si ordenamos cierta columna, ¿la otra columna seguirá automáticamente?

String [] file = {"H1.txt","H2.txt","H3.txt","M4.txt","M5.txt","M6.txt"};
ArrayList<String> fileList = new ArrayList<String>(Arrays.asList(file));

String [] img = {"e1.jpg","e2.jpg","e3.jpg","e4.jpg","e5.jpg","e6.jpg"};
ArrayList<String> imgList = new ArrayList<String>(Arrays.asList(img));

//randomized files
Collections.shuffle(fileList);

salida después de la aleatorización, por ejemplo:

fileList = {"M4.txt","M6.txt","H3.txt","M5.txt","H2.txt","H1.txt"};

salida prevista:

 imgList = {"e4.jpg","e6.jpg","e3.jpg","e5.jpg","e2.jpg","e1.jpg"};
Jessy avatar Nov 20 '10 03:11 Jessy
Aceptado

Úselo Collections.shuffle()dos veces, con dos Randomobjetos inicializados con la misma semilla:

long seed = System.nanoTime();
Collections.shuffle(fileList, new Random(seed));
Collections.shuffle(imgList, new Random(seed));

El uso de dos Randomobjetos con la misma semilla garantiza que ambas listas se mezclarán exactamente de la misma manera. Esto permite dos colecciones separadas.

Michael Borgwardt avatar Nov 19 '2010 20:11 Michael Borgwardt

Envuélvalos en un registro para que pueda simplemente terminar con una sola matriz o Listde esos objetos.

public record Data (
    String txtFileName,
    String imgFileName
) {}

Ejemplo de uso:

List<Data> list = new ArrayList<Data>();
list.add(new Data("H1.txt", "e1.jpg"));
list.add(new Data("H2.txt", "e2.jpg"));
// ...

Collections.shuffle(list);
BalusC avatar Nov 19 '2010 20:11 BalusC