Java 8: HashMap initialization with lambda expressions
20,009
Solution 1
This works fine in the Netbeans Lamba builds downloaded from: 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());
}
}
Solution 2
You are doing correct, update JDK library to 1.8 version from Java Build Path in Eclipse Project properties.
I just now tried the below code and it is working fine on my 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));
Author by
user35443
Updated on September 30, 2020Comments
-
user35443 over 3 years
I'm trying to declare and define larger hash map at once. This is how I do it:
public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{ put(x, y); put(x, y); }};
But, when I try to use lambda expressions in body of
put
, I'm hitting on eclipse warrning/error. This is how I use lambda in HashMap:public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{ put(0, () -> { return "nop"; }); put(1, () -> { return "nothing...."; }); }};
Eclipse underlines whole part of lambda starting with comma before. Error messages:
Syntax error on token ",", Name expected Syntax error on tokens, Expression expected instead
Does anybody know what am I doing wrong? Is initialization by lambda expression allowed in
HashMap
? Please help.