2016-03-24 4 views
6

Sono nuovo di Java 8 e questa potrebbe essere una domanda stupida ma sono bloccato a questo punto.java lambdaj 'variable_name' non può essere risolto con un errore variabile

Sto cercando di eseguire il seguente codice in eclissi ma fornisce un errore di compilazione.

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.List; 
import java.util.function.Predicate; 
import java.util.stream.Stream; 
import ch.lambdaj.Lambda; 

public class LambdajTest { 

    public static void main(String[] args) { 

     List list = new ArrayList(); 
     list.add(1); 
     list.add(3); 
     list.add(8); 
     list.add(10); 
     list.add(16); 

     int sum = list.stream().filter(p -> p > 10).mapToInt(p -> p).sum(); 
    } 

} 

L'errore è: - p non può essere risolto in una variabile. Ho aggiunto il jar lambdaj 2.3.3 in classpath.

Gentilmente fornire una soluzione. Grazie in anticipo.

+0

È necessario dichiarare p come int nell'espressione lambda – ryekayo

+1

Il proprio codice non ha bisogno di LambdaJ. LambdaJ è principalmente una libreria che fornisce buoni metodi di raccolta ed è indirizzata a Java <8. Non ha nulla a che fare con Java 8 Lambdas. –

risposta

4

Il problema è che la JVM non sa che tipo di oggetto p è come si sta utilizzando una raccolta non elaborata.

Change

List list = new ArrayList();

a

List<Integer> list = new ArrayList<>();

La JVM ora capisce che si tratta di streaming su una collezione di oggetti Integer.

+0

Ha più senso di quello che pensavo fosse. – ryekayo

Problemi correlati