[Java] एक ही फैशन में दो ArrayLists यादृच्छिक कैसे करें?


Answers

उन्हें एक और कक्षा में लपेटें ताकि आप एक ही सरणी या उन वस्तुओं की List के साथ समाप्त हो सकें।

public class Data {
    private String txtFileName;
    private String imgFileName;

    // Add/generate c'tor, getter/setter, equals, hashCode and other boilerplate.
}

उपयोग उदाहरण:

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);
Question

मेरे पास दो imgList और imgList जो एक दूसरे से संबंधित हैं, उदाहरण के लिए "e1.jpg" से संबंधित "H1.txt"। imgList सूची के यादृच्छिकरण के अनुसार imgList की सूची को स्वचालित रूप से यादृच्छिक कैसे करें? एक्सेल में पसंद करते हैं, अगर हम कुछ कॉलम को सॉर्ट करते हैं, तो दूसरा कॉलम स्वचालित रूप से अनुसरण करेगा?

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"};



पूरी तरह से सुनिश्चित नहीं है कि आपका "स्वचालित रूप से" क्या मतलब है - आप एक कंटेनर ऑब्जेक्ट बना सकते हैं जिसमें दोनों ऑब्जेक्ट्स हों:

पब्लिक क्लास FileImageHolder {स्ट्रिंग फ़ाइल नाम; स्ट्रिंग छविनाम; // TODO: यहां सामान डालें}

और फिर उसे एक सरणी सूची में रखें और उस सरणी सूची को यादृच्छिक बनाएं।

अन्यथा, आपको ट्रैक रखना होगा कि प्रत्येक तत्व एक सूची में कहाँ स्थानांतरित हो जाता है, और इसे दूसरे में भी ले जाया जाता है।




आप इसे नक्शे के साथ कर सकते हैं:

Map<String, String> fileToImg:
List<String> fileList = new ArrayList(fileToImg.keySet());
Collections.shuffle(fileList);
for(String item: fileList) {
    fileToImf.get(item);
}

यह यादृच्छिक क्रम में छवियों के माध्यम से फिर से शुरू होगा।




स्ट्रिंग्स के दो सरणी होने के बजाय, एक कस्टम क्लास की एक सरणी है जिसमें आपके दो तार होते हैं।