2013-06-28 45 views
11

Tôi đang cố gắng khai báo và xác định bản đồ băm lớn hơn cùng một lúc. Đây là cách tôi làm điều đó:Java 8: Khởi tạo HashMap với các biểu thức lambda

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

Tuy nhiên, khi tôi cố gắng sử dụng các biểu thức lambda trong cơ thể của put, tôi chạm vào nhật thực warrning/lỗi. Đây là cách tôi sử dụng lambda trong HashMap:

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

Eclipse gạch dưới toàn bộ phần lambda bắt đầu bằng dấu phẩy trước đây. Thông báo lỗi:

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

Có ai biết tôi đang làm gì sai? Được khởi tạo bởi biểu thức lambda được cho phép trong HashMap? Hãy giúp tôi.

+0

Câu hỏi thú vị! +1 – fge

+1

Biên dịch trong 'javac'. Bạn có chắc chắn rằng Java 8 được kích hoạt cho dự án của bạn? – axtavt

+0

Dường như bạn đang biên dịch với một trình biên dịch trước đó thì phiên bản 8 – Reimeus

Trả lời

6

này hoạt động tốt trong Netbeans Lamba builds tải về từ: 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()); 
    } 

} 
0

Theo như tôi biết Netbeans 7.4 hỗ trợ đầy đủ Java 8. Tôi có vấn đề với nhật thực toàn phần (ATM nó không hỗ trợ java8 vì vậy nó chỉ có thể để biên dịch các biểu thức Lambda cũ 7), đó là lý do tại sao tôi chuyển sang Netbeans. Nếu bạn đã cài đặt Phiên bản Netbeans trước đó, hãy đảm bảo rằng bạn đã gỡ cài đặt hoàn toàn nó để đảm bảo rằng phiên bản mới hơn không thể tham chiếu đến Logfiles cũ, v.v.

3

Bạn đang sửa, cập nhật thư viện JDK lên phiên bản 1.8 từ Đường dẫn xây dựng Java trong các thuộc tính dự án Eclipse.

tôi chỉ là bây giờ thử đoạn code dưới đây và nó đang làm việc tốt trên Eclipse của tôi:

 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)); 
Các vấn đề liên quan