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

我正在尝试一次声明和定义更大的哈希映射。 我是这样做的:

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

但是,当我尝试在put使用lambda表达式时,我正在进行eclipse warrning / error。 这就是我在HashMap中使用lambda的方法:

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

Eclipse以逗号开头强调lambda的整个部分。 错误消息:

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

有人知道我做错了什么吗? 是否允许在HashMap lambda表达式进行初始化? 请帮忙。

这在从以下url下载的Netbeans Lamba版本中运行良好: 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> opcode_only = new HashMap>() { { put(0, () -> { return "nop"; }); put(1, () -> { return "nothing...."; }); } }; System.out.println(opcode_only.get(0).call()); } } 

您正在做的正确,从Eclipse Project属性中的Java Build Path将JDK库更新为1.8版本。

我刚刚尝试了以下代码,它在Eclipse上工作正常:

  HashMap hmLambda = new HashMap() { { 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)); 

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