我正在尝试一次声明和定义更大的哈希映射。我就是这样做的:
public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{
put(x, y);
put(x, y);
}};
但是,当我尝试在put
的主体中使用lambda表达式时,我正在进行eclipse warrning / error。这就是我在HashMap中使用lambda的方法:
public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{
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表达式初始化?请帮忙。
答案 0 :(得分:7)
这在从http://bertram2.netbeans.org:8080/job/jdk8lambda/lastSuccessfulBuild/artifact/nbbuild/
下载的Netbeans Lamba版本中运行良好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());
}
}
答案 1 :(得分:4)
您做得正确,从Eclipse Project属性中的Java Build Path将JDK库更新为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));
答案 2 :(得分:0)
据我所知,Netbeans 7.4完全支持Java 8.我遇到了eclipse的问题(因为它不支持java8所以它只能编译7的旧Lambda表达式),这就是我切换到Netbeans的原因。如果您已经安装了早期版本的Netbeans,请确保完全卸载它以确保较新的Netbeans无法引用旧的日志文件等。