У меня есть два архива filelist
и imgList
которые связаны друг с другом, например, "H1.txt", связанный с "e1.jpg". Как автоматически рандомизировать список в imgList
соответствии с рандомизацией fileList
? Как и в Excel, если мы сортируем определенный столбец, другой столбец будет автоматически следовать?
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);
вывод после рандомизации, например:
fileList = {"M4.txt","M6.txt","H3.txt","M5.txt","H2.txt","H1.txt"};
предполагаемый выход:
imgList = {"e4.jpg","e6.jpg","e3.jpg","e5.jpg","e2.jpg","e1.jpg"};
java
list
collections
arraylist
Джесси
источник
источник
Самый простой подход состоит в том, чтобы объединить два значения вместе в тип, который имеет и изображение, и файл. Затем построить
ArrayList
из этого и перемешайте его.Это также улучшает инкапсуляцию, предоставляя вам свойство, при котором вы всегда будете иметь такое же количество файлов, что и изображения.
Альтернативой, если вам действительно не нравится эта идея, было бы написать собственный код в случайном порядке (есть множество примеров модифицированного перемешивания Фишера-Йейтса в Java, в том числе несколько в Stack Overflow, я подозреваю) и просто работать с обоими списками в в то же время. Но я настоятельно рекомендую использовать подход «улучшения инкапсуляции».
источник
Вы можете сделать это с картами:
Это будет перебирать изображения в случайном порядке.
источник
Это можно сделать с помощью метода shuffle:
источник
Вместо двух массивов строк, есть один массив пользовательского класса, который содержит две строки.
источник
Вы можете создать массив, содержащий числа от 0 до 5 и перемешать их. Затем используйте результат как отображение «oldIndex -> newIndex» и примените это отображение к обоим исходным массивам.
источник
Не совсем уверен, что вы подразумеваете под «автоматически» - вы можете создать контейнерный объект, который содержит оба объекта:
открытый класс FileImageHolder {String fileName; String imageName; // TODO: вставьте материал сюда}
А затем поместите это в список массивов и рандомизируйте этот список массивов.
В противном случае вам нужно будет отслеживать, где каждый элемент перемещен в одном списке, а также перемещать его в другом.
источник
Если нет способа извлечь старый индекс элементов после их перетасовки, я бы сделал это одним из двух способов:
A) Создайте другой список multi_shuffler = [0, 1, 2, ..., file.size ()] и перемешайте его. Перейдите к нему, чтобы получить порядок для ваших перемешанных файлов / списков изображений.
ArrayList newFileList = new ArrayList (); ArrayList newImgList = new ArrayList (); для (я = 0; я
или B) Создайте класс StringWrapper для хранения имен файлов / изображений и объедините два списка, которые вы уже получили, в один: ArrayList комбинированный список;
источник