2013-06-28 25 views
11

大きなハッシュマップを宣言して定義しようとしています。これは私がそれを行う方法です。Java 8:ラムダ式を使ったHashMapの初期化

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

Eclipseは前にコンマで始まるラムダの全体の一部を強調しています。 エラーメッセージ:

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

誰も私が間違っているのか知っていますか?ラムダ式による初期化はHashMapで許可されていますか?助けてください。

+0

興味深い質問を! +1 – fge

+1

'javac'でコンパイルします。あなたのプロジェクトでJava 8が有効になっていますか? – axtavt

+0

あなたが以前のバージョン8のコンパイラでコンパイルしているように見えます – Reimeus

答えて

6

これはからダウンロードしたビルドNetbeansのラムダで正常に動作します:ATM(それだけでできるようですので、それはjava8をサポートしていない限り、私は、NetBeans 7.4を知っているように、完全に私は日食の問題を持っていたのJava 8をサポートしています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

7の古いラムダ式をコンパイルするために、それがNetbeansに切り替えた理由です。以前のバージョンのNetbeansをインストールした場合は、完全にアンインストールして、新しいものが古いログファイルなどを参照できないようにしてください。

3

JDKライブラリをバージョン1.8から正しく更新していますEclipseプロジェクトのJavaビルド・パス。

私はちょうど今、以下のコードを試してみましたし、それは私のEclipse上で正常に動作している:

 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)); 
関連する問題