2012-12-16 16 views
11

में अर्रेलिस्ट में किसी ऑब्जेक्ट की सभी घटनाओं को खोजने का प्रयास कर रहा है मेरे पास जावा में एक ऐरेलिस्ट है, और मुझे इसमें किसी विशिष्ट ऑब्जेक्ट की सभी घटनाएं ढूंढनी होंगी। विधि ArrayList.indexOf (ऑब्जेक्ट) बस एक घटना पाती है, इसलिए ऐसा लगता है कि मुझे कुछ और चाहिए। सभी तत्वों से अधिकजावा

+0

"विशिष्ट वस्तु" आप संदर्भ मतलब है के द्वारा 'equals' या' == ' –

+0

मेरे मामले में होना चाहिए यह पूर्णांकों का एक ArrayList है, तो उन दोनों के लिए इस्तेमाल किया जा सकता है। लेकिन वास्तव में ऐसे मामले हैं जिनमें से केवल एक का उपयोग किया जा सकता है? – missrg

+0

@missrg .. ऑब्जेक्ट सामग्री की तुलना करने के लिए हमेशा 'बराबर' का उपयोग करें। चाहे 'पूर्णांक', या कोई अन्य वस्तुएं हों। –

उत्तर

11

मुझे नहीं लगता कि आपको इसके बारे में बहुत पसंद होना चाहिए। निम्नलिखित ठीक काम करना चाहिए:

static ArrayList<Integer> indexOfAll(Object obj, ArrayList list){ 
    ArrayList<Integer> indexList = new ArrayList<Integer>(); 
    for (int i = 0; i < list.size(); i++) 
     if(obj.equals(list.get(i))) 
      indexList.add(i); 
    return indexList; 
} 
+0

+ 1 के साथ अच्छा अनुकरण, मेरे सुझाव की तरह है लेकिन यह कॉपी-पेस्ट के लिए तैयार है :) –

+0

इसका मतलब है कि आपके पास मूल्यों की एक सूची होगी जो सभी बराबर हैं। अनुक्रमणिका स्थान वापस करने के लिए (मान नहीं) –

+0

मैंने जो कोड लिखा है वह आपको समान वस्तुओं का सूचकांक देगा, जैसा कि वेरिएबल नाम "इंडेक्सलिस्ट" द्वारा इंगित किया गया है। –

2

पुनरावृति, पाश

ArrayList के प्रत्येक तत्व अपने object (arrayList.get(i).equals(yourObject))

के साथ तुलना नहीं टूटते अगर सूचकांक (i) से मैच एक अलग ArrayList में संग्रहित किया जाना चाहिए (arraListMatchingIndexes)।

कभी-कभी मैं इस स्थिति में "सभी को हटा देता हूं", जब मुझे पदों की भी आवश्यकता होती है।

मुझे आशा है कि इससे मदद मिलती है!

2

for (int i=0; i<arrList.size(); i++){ 
    if (arrList.get(i).equals(obj)){ 
     // It's an occurance, add to another list 
    } 
} 

आशा इस मदद करता है।

+1

सही नहीं है == का उपयोग –

+0

के बराबर किया जाना चाहिए। धन्यवाद –

4

मुझे लगता है कि आपको ArrayList के सभी सूचकांक प्राप्त करने की आवश्यकता है जहां उस स्लॉट पर ऑब्जेक्ट दिया गया ऑब्जेक्ट जैसा ही है।

निम्न विधि क्या आप इसे करना चाहते हैं हो सकता है:

public static <T> int[] indexOfMultiple(ArrayList<T> list, T object) { 
    ArrayList<Integer> indices = new ArrayList<>(); 
    for (int i = 0; i < list.size(); i++) { 
     if (list.get(i).equals(object)) { 
      indices.add(i); 
     } 
    } 
    // ArrayList<Integer> to int[] conversion 
    int[] result = new int[indices.size()]; 
    for (int i = 0; i < indices.size(); i++) { 
     result[i] = indices.get(i); 
    } 
    return result; 
} 

यह equals विधि का उपयोग कर वस्तु की खोज करके सूचकांक के साथ सूची में वर्तमान सरणी सूचकांक बचत होती है। आप अपने प्रश्न है, जो समानता के लिए परीक्षण करने के लिए equals विधि का उपयोग करता में indexOf की चर्चा करते हुए कर रहे हैं, के रूप में जावा दस्तावेज में कहा: दिए गए तर्क के पहले घटना के लिए

गई खोजें, equals पद्धति का उपयोग करके समानता के लिए परीक्षण ।

+0

ठीक है, मैंने इंडेक्सऑफ विधि का उल्लेख किया क्योंकि मैं उम्मीद कर रहा था कि मेरे मामले के लिए एक समान विधि हो सकती है, जैसे स्ट्रिंग्स के लिए indexOf (char, int) है। उत्तर और स्पष्टीकरण के लिए धन्यवाद :) – missrg

+1

+1 जेनेरिक –

1

यह इस answer के समान है, सिर्फ बजाय stream API का उपयोग करता।

List<String> words = Arrays.asList("lorem","ipsum","lorem","amet","lorem"); 
String str = "lorem"; 
List<Integer> allIndexes = 
     IntStream.range(0, words.size()).boxed() 
       .filter(i -> words.get(i).equals(str)) 
       .collect(Collectors.toList()); 
System.out.println(allIndexes); // [0,2,4]