2014-10-03 13 views
13

का उपयोग कर किसी सूची के किसी आइटम की सभी इंडेक्स खोजें I जावा 8 स्ट्रीम और लैम्ब्डा एक्सप्रेशन का उपयोग कर क्रमिक खोज की कोशिश कर रहा हूं। मैं list.indexOf(e) पता यहाँ मेरी कोडस्ट्रीम एपीआई

List<Integer> list = Arrays.asList(10, 6, 16, 46, 5, 16, 7); 
int search = 16; 
list.stream().filter(p -> p == search).forEachOrdered(e -> System.out.println(list.indexOf(e))); 
Output: 2 
     2 

है हमेशा पहली घटना के सूचकांक प्रिंट करता है। मैं सभी इंडेक्स कैसे प्रिंट करूं?

+0

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

+1

http://stackoverflow.com/q/18552005/1407656 या http://stackoverflow.com/q/22793006/1407656 – toniedzwiedz

+0

@ संभावित पोस्ट में क्वेरी क्या है, के संभावित डुप्लिकेट। जब मैं क्वेरी पर संकलन त्रुटि देने की कोशिश करता हूं। – mallikarjun

उत्तर

25

एक शुरुआत के लिए, lambdas का उपयोग कर, सभी समस्याओं का हल नहीं है ... लेकिन, फिर भी पाश के लिए एक के रूप में, आप इसे लिखते हैं:

List<Integer> results = new ArrayList<>(); 
for (int i = 0; i < list.size(); i++) { 
    if (search == list.get(i).intValue()) { 
     // found value at index i 
     results.add(i); 
    } 
} 

अब, वहाँ उस के साथ विशेष रूप से कुछ भी गलत नहीं , लेकिन ध्यान दें कि यहां महत्वपूर्ण पहलू सूचकांक है, मूल्य नहीं। सूचकांक इनपुट है, और 'लूप' का आउटपुट।

एक धारा ::

List<Integer> list = Arrays.asList(10, 6, 16, 46, 5, 16, 7); 
int search = 16; 
int[] indices = IntStream.range(0, list.size()) 
       .filter(i -> list.get(i) == search) 
       .toArray(); 
System.out.printf("Found %d at indices %s%n", search, Arrays.toString(indices)); 

के रूप में उत्पादन उत्पादन:

Found 16 at indices [2, 5] 
+0

क्या printf फ़ंक्शन के अंत में अतिरिक्त% n है, तीन सबसाइट्स लेकिन दो पैरा प्रदान किए गए थे? – Whome

+3

@Wome - '% n' एक ओएस विशिष्ट लाइन-टर्मिनेटर (एक अच्छी तरह से व्यवहार किया गया \ n') जोड़ता है। इसे मिलान करने वाले प्रतिस्थापन मूल्य की आवश्यकता नहीं है। (देखें "लाइन सेपरेटर [प्रलेखन में] (http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html)) – rolfl

संबंधित मुद्दे