J'ai deux arraylist filelist
et imgList
qui sont liés les uns aux autres, par exemple "H1.txt" lié à "e1.jpg". Comment randomiser automatiquement la liste en imgList
fonction de la randomisation de fileList
? Comme dans Excel, si nous trions certaines colonnes, l'autre colonne suivra automatiquement?
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);
sortie après randomisation par exemple:
fileList = {"M4.txt","M6.txt","H3.txt","M5.txt","H2.txt","H1.txt"};
sortie prévue:
imgList = {"e4.jpg","e6.jpg","e3.jpg","e5.jpg","e2.jpg","e1.jpg"};
la source
L'approche la plus simple consiste à encapsuler les deux valeurs ensemble dans un type contenant à la fois l'image et le fichier. Ensuite , construire un
ArrayList
de qui et mélangez.Cela améliore également l'encapsulation, vous donnant la propriété que vous aurez toujours le même nombre de fichiers que d'images automatiquement.
Une alternative si vous n'aimez vraiment pas cette idée serait d'écrire le code de shuffle vous-même (il existe de nombreux exemples de shuffle Fisher-Yates modifié en Java, dont plusieurs sur Stack Overflow je suppose) et de simplement opérer sur les deux listes à le même temps. Mais je recommanderais fortement de suivre l'approche "améliorer l'encapsulation".
la source
Vous pouvez le faire avec des cartes:
Cela parcourra les images dans un ordre aléatoire.
la source
Cela peut être fait en utilisant la méthode aléatoire:
la source
Au lieu d'avoir deux tableaux de chaînes, ayez un tableau d'une classe personnalisée qui contient vos deux chaînes.
la source
Vous pouvez créer un tableau contenant les nombres 0 à 5 et les mélanger. Utilisez ensuite le résultat comme un mappage de "oldIndex -> newIndex" et appliquez ce mappage à vos deux tableaux d'origine.
la source
Vous ne savez pas exactement ce que vous entendez par "automatiquement" - vous pouvez créer un objet conteneur qui contient les deux objets:
classe publique FileImageHolder {String fileName; String imageName; // TODO: insérer des trucs ici}
Et puis mettez cela dans une liste de tableaux et randomisez cette liste de tableaux.
Sinon, vous devrez garder une trace de l'endroit où chaque élément a été déplacé dans une liste, et le déplacer également dans l'autre.
la source
À moins qu'il n'y ait un moyen de récupérer l'ancien index des éléments après qu'ils ont été mélangés, je le ferais de deux manières:
A) Créez une autre liste multi_shuffler = [0, 1, 2, ..., file.size ()] et mélangez-la. Faites une boucle dessus pour obtenir l'ordre de vos listes de fichiers / images mélangées.
ArrayList newFileList = new ArrayList (); ArrayList newImgList = new ArrayList (); pour (i = 0; i
ou B) Créez une classe StringWrapper pour contenir les noms de fichier / image et combinez les deux listes que vous avez déjà en une seule: ArrayList combineList;
la source