2013-06-28 35 views
11

Bir kerede daha büyük karma haritayı bildirmeye ve tanımlamaya çalışıyorum. Ben put gövdesinde lambda ifadeleri kullanmaya çalıştığınızda, ben Tutulma warrning/hata vuruyorumJava 8: Lambda ifadeleriyle HashMap başlatma

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

Ama: Bu ben böyle yaparız.

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

Eclipse önce virgül ile başlayan lambda bütün bölümünü altını çizer: Ben HashMap lambda nasıl kullandıklarını budur. Hata mesajları:

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

herkes yanlış ne yapıyorum biliyor mu? HashMap'da lambda ifadesi ile başlatma başlatıldı mı? Lütfen yardım et.

+0

İlginç bir soru! +1 – fge

+1

"Javac'ta" derler. Projeniz için Java 8'in etkin olduğundan emin misiniz? – axtavt

+0

Daha önce bir derleyiciyle derledik gibi görünüyor. 8 – Reimeus

cevap

6

Bu NetBeans Lamba içinde çalışıyor indirilen yapýlar: bu sadece mümkün yüzden ben NetBeans 7.4 Bildiğim kadarıyla 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

tamamen Java 8. destekler Tutulma Sorunları (Bu java8 desteklemeyen ATM vardı 7) eski Lambda ifadelerini derlemek için, bu yüzden Netbeans'e geçtim. Daha önceki bir Netbeans Sürümünü kurduysanız, lütfen daha yeni olan eski Logfiles'a başvurmadığından emin olmak için TAMAM'ı kaldırın emin olun.

3

Doğru yapıyorsunuz, JDK kitaplığını 1.8 sürümüne güncelleştirin. Eclipse Proje özelliklerinde Java Oluşturma Yolu.

Şimdi sadece aşağıdaki kodu denedim ve benim Eclipse üzerinde iyi çalışıyor:

 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));