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));
Share:
20,009
user35443
Author by

user35443

Updated on September 30, 2020

Comments

  • user35443
    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.