¿Cómo aleatorizar dos ArrayLists de la misma manera?
Tengo dos listas filelist
de matrices imgList
relacionadas entre sí, por ejemplo, "H1.txt" relacionadas con "e1.jpg". ¿ Cómo aleatorizar automáticamente la lista de imgList
acuerdo 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"};
Aceptado
Úselo Collections.shuffle()
dos veces, con dos Random
objetos 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 Random
objetos con la misma semilla garantiza que ambas listas se mezclarán exactamente de la misma manera. Esto permite dos colecciones separadas.
Envuélvalos en un registro para que pueda simplemente terminar con una sola matriz o List
de 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);