मूल्य अनुलिपि के लिए सरणी इंडेक्स के मानचित्र में सरणी बदलें [डुप्लिकेट]

Dec 13 2020

इस कोड में क्या गलत है?

int[] nums = new int[] {8, 3, 4};
Map<Integer,Integer> val2Idx = 
    IntStream.range(0, nums.length)
        .collect(Collectors.toMap(idx -> idx, idx -> nums[idx]));

मैं Mapइन मूल्यों के साथ उत्पादन करने की उम्मीद कर रहा हूं :

{0=8, 1=3, 2=4}

लेकिन त्रुटि है

इंटरफ़ेस में विधि संग्रह IntStream दिए गए प्रकारों पर लागू नहीं किया जा सकता है;

जवाब

3 Mureinik Dec 13 2020 at 03:28

आपको intएस को बॉक्स करने की आवश्यकता है Integer:

Map<Integer,Integer> val2Idx =
    IntStream.range(0, nums.length)
             .boxed() // Here!
             .collect(Collectors.toMap(idx -> idx, idx -> nums[idx]));
1 iota Dec 13 2020 at 03:29

IntStream#collectतीन तर्कों की आवश्यकता है; यदि आप 2-तर्क संस्करण का उपयोग करना चाहते हैं, तो आपको IntStream#boxedइसे परिवर्तित करने के लिए उपयोग करना होगा Stream<Integer>

int[] nums = new int[] {8, 3, 4};
Map<Integer,Integer> val2Idx = 
    IntStream.range(0, nums.length).boxed()
        .collect(Collectors.toMap(idx -> idx, idx -> nums[idx]));
System.out.println(val2Idx);
AndreMoraes Dec 13 2020 at 03:30

क्योंकि idxयह एक वस्तु है और एक इंट नहीं है, यह क्षरण करता है