Java 8:使用lambda表达式初始化HashMap

Java 8:使用lambda表达式初始化HashMap,java,collections,lambda,hashmap,java-8,Java,Collections,Lambda,Hashmap,Java 8,我试图一次声明并定义更大的散列映射。我就是这样做的: public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{ put(x, y); put(x, y); }}; Eclipse在lambda的整个部分加下划线,前面以逗号开头。 错误消息: Syntax error on token ","

我试图一次声明并定义更大的散列映射。我就是这样做的:

public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{
    put(x, y);
    put(x, y);
}};
Eclipse在lambda的整个部分加下划线,前面以逗号开头。 错误消息:

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

有人知道我做错了什么吗?
HashMap
中是否允许通过lambda表达式初始化?请提供帮助。

这在以下下载的Netbeans Lamba版本中运行良好:

import java.util.*;
导入java.util.concurrent.Callable;
公共类StackoverFlowQuery{
公共静态void main(字符串[]args)引发异常{
HashMap操作码_仅=
新HashMap(){
{
放置(0,()->{
返回“nop”;
});
put(1,()->{
返回“nothing…”;
});
}
};
System.out.println(仅限操作码_.get(0.call());
}
}

据我所知,Netbeans 7.4完全支持Java 8。我在eclipse上遇到了问题(atm不支持java8,所以它只能编译7的旧Lambda表达式),这就是我切换到Netbeans的原因。如果您安装了早期版本的Netbeans,请确保完全卸载它,以确保较新版本不能引用旧的日志文件等。

如果您做得正确,请在Eclipse项目属性中将JDK库从Java构建路径更新为1.8版本

我刚刚尝试了以下代码,它在我的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));
HashMap hmLambda=newhashmap(){
{
put(0,1);
put(1,1);
}
};
System.out.println(hmLambda.get(0));
hmLambda.forEach((k,v)->System.out.println(“Key”+k
+价值观是:“+v”);

有趣的问题+1
javac
中的组件。您确定您的项目启用了Java 8吗?看起来您是使用早于版本8的编译器进行编译的。我不确定Eclipse是否已经完全更新。另外,请参阅。我现在已经检查了这段代码是否能够完美地编译并在Eclipse(4.4.1,一个1年前的版本)上运行,因此这很可能是一个问题,因为Eclipse早期发布了对Java8的支持。
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());
  }

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