Saya memiliki dua daftar array filelist
dan imgList
yang terkait satu sama lain, misalnya "H1.txt" yang terkait dengan "e1.jpg". Bagaimana cara secara acak daftar imgList
sesuai dengan pengacakanfileList
? Seperti di excel, jika kita mengurutkan kolom tertentu, kolom lainnya akan secara otomatis mengikuti?
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);
output setelah pengacakan misalnya:
fileList = {"M4.txt","M6.txt","H3.txt","M5.txt","H2.txt","H1.txt"};
hasil yang diinginkan:
imgList = {"e4.jpg","e6.jpg","e3.jpg","e5.jpg","e2.jpg","e1.jpg"};
java
list
collections
arraylist
Jessy
sumber
sumber
Pendekatan paling sederhana adalah merangkum kedua nilai tersebut bersama-sama menjadi tipe yang memiliki gambar dan file. Kemudian membangun
ArrayList
dari yang dan mengocok itu.Itu meningkatkan enkapsulasi juga, memberi Anda properti yang Anda akan selalu memiliki jumlah file yang sama dengan gambar secara otomatis.
Alternatif jika Anda benar - benar tidak menyukai gagasan itu adalah menulis sendiri kode shuffle (ada banyak contoh shuffle Fisher-Yates yang dimodifikasi di Jawa, termasuk beberapa di Stack Overflow yang saya duga) dan hanya beroperasi pada kedua daftar di waktu yang sama. Tapi saya sangat merekomendasikan pergi dengan pendekatan "meningkatkan enkapsulasi".
sumber
Anda bisa melakukan ini dengan peta:
Ini akan beralih melalui gambar dalam urutan acak.
sumber
Ini dapat dilakukan dengan menggunakan metode acak:
sumber
Alih-alih memiliki dua larik String, miliki satu larik kelas khusus yang berisi dua string Anda.
sumber
Anda bisa membuat larik yang berisi angka 0 hingga 5 dan mengocoknya. Kemudian gunakan hasilnya sebagai pemetaan "oldIndex -> newIndex" dan terapkan pemetaan ini untuk kedua array asli Anda.
sumber
Tidak sepenuhnya yakin apa yang Anda maksud dengan "secara otomatis" - Anda dapat membuat objek penampung yang menampung kedua objek:
FileImageHolder {String fileName kelas publik; String imageName; // TODO: masukkan barang di sini}
Dan kemudian memasukkannya ke dalam daftar array dan mengacak daftar array itu.
Jika tidak, Anda perlu melacak di mana setiap elemen bergerak dalam satu daftar, dan memindahkannya di yang lain juga.
sumber
Kecuali jika ada cara untuk mengambil indeks elemen yang lama setelah mereka dikocok, saya akan melakukannya dengan satu dari dua cara:
A) Buat daftar lain multi_shuffler = [0, 1, 2, ..., file.size ()] dan kocok. Lingkari untuk mendapatkan urutan daftar file / gambar yang diacak.
ArrayList newFileList = new ArrayList (); ArrayList newImgList = new ArrayList (); untuk (i = 0; i
atau B) Buat kelas StringWrapper untuk menampung nama file / gambar dan menggabungkan dua daftar yang sudah Anda miliki menjadi satu: ArrayList gabungan Daftar;
sumber