2013-06-28 20 views
11

मैं एक बार में बड़े हैश मानचित्र की घोषणा और परिभाषित करने की कोशिश कर रहा हूं।जावा 8: लैम्ब्डा अभिव्यक्तियों के साथ हैश मैप प्रारंभिकरण

public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{ 
    put(x, y); 
    put(x, y); 
}}; 

लेकिन, जब मैं put के शरीर में लैम्ब्डा एक्सप्रेशन का उपयोग करने का प्रयास करें, मैं ग्रहण warrning/त्रुटि पर मार कर रहा हूँ: यह कैसे मैं यह कर रहा है। इस तरह मैं HashMap में लैम्ब्डा का उपयोग करें:

public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{ 
    put(0,() -> { return "nop"; }); 
    put(1,() -> { return "nothing...."; }); 
}}; 

ग्रहण से पहले अल्पविराम के साथ शुरू लैम्ब्डा के पूरे हिस्से को रेखांकित करता है। त्रुटि संदेश:

Syntax error on token ",", Name expected  
Syntax error on tokens, Expression expected instead 

किसी को भी पता है कि मैं क्या गलत कर रहा हूँ? HashMap में लैम्ब्डा अभिव्यक्ति द्वारा प्रारंभ किया गया है? कृपया मदद करे।

+0

दिलचस्प सवाल! +1 – fge

+1

'जावैक' में संकलित करता है। क्या आप सुनिश्चित हैं कि आपकी परियोजना के लिए जावा 8 सक्षम है? – axtavt

+0

ऐसा लगता है कि आप पहले एक कंपाइलर के साथ संकलन कर रहे हैं तो संस्करण 8 – Reimeus

उत्तर

6

यह Netbeans लांबा में ठीक काम करता है से डाउनलोड बनाता है: जहाँ तक http://bertram2.netbeans.org:8080/job/jdk8lambda/lastSuccessfulBuild/artifact/nbbuild/

import java.util.*; 
import java.util.concurrent.Callable; 

public class StackoverFlowQuery { 

    public static void main(String[] args) throws Exception { 

    HashMap<Integer, Callable<String>> opcode_only = 
      new HashMap<Integer, Callable<String>>() { 
      { 
       put(0,() -> { 
       return "nop"; 
       }); 
       put(1,() -> { 
       return "nothing...."; 
       }); 
      } 
      }; 
    System.out.println(opcode_only.get(0).call()); 
    } 

} 
0

के रूप में मैं Netbeans 7.4 पता पूरी तरह से जावा 8. समर्थन करता है, मैं ग्रहण के साथ कोई समस्या (एटीएम यह java8 समर्थन नहीं कर रहा है था तो यह सिर्फ सक्षम है 7 के पुराने लैम्ब्डा अभिव्यक्तियों को संकलित करने के लिए), यही कारण है कि मैं नेटबीन्स के लिए स्विच किया। यदि आपने नेटबीन्स के पहले संस्करण को इंस्टॉल किया है, तो कृपया यह सुनिश्चित करने के लिए पूरी तरह से अनइंस्टॉल करें कि नया व्यक्ति पुराने लॉगफाइल इत्यादि को संदर्भित करने में सक्षम नहीं है।

3

आप सही कर रहे हैं, JDK लाइब्रेरी को 1.8 संस्करण से अपडेट करें ग्रहण परियोजना गुणों में जावा बिल्ड पथ।

मैं अभी नीचे कोड की कोशिश की और यह मेरे ग्रहण पर ठीक काम कर रहा है:

 HashMap<Integer, Integer> hmLambda = new HashMap<Integer, Integer>() { 
     { 
      put(0, 1); 
      put(1, 1); 
     } 
    }; 
    System.out.println(hmLambda.get(0)); 

    hmLambda.forEach((k, v) -> System.out.println("Key " + k 
      + " and Values is: " + v)); 
संबंधित मुद्दे