Comment utiliser une variable non finale dans Java 8 Lambdas

Comment utiliser une variable non finale dans Java 8 lambda. Il génère une erreur de compilation en disant “La date de la variable locale définie dans une scope englobante doit être finale ou effective”

Je veux réellement atteindre les objectives suivants

public Integer getTotal(Date date1, Date date2) { if(date2 == null || a few more conditions) { date2 = someOtherDate; } return someList.stream().filter(filter based on date1 and date2).map(Mapping Function).reduce(Addition); } 

Comment est-ce que je réalise ceci? Il jette une erreur de compilation pour date2. Merci,

Utilisez une autre variable que vous pouvez initier une fois.

 final Date tmpDate; if(date2 == null || a few more conditions) { tmpDate = someOtherDate; } else { tmpDate = date2; } 

Je pense que vous devriez juste obtenir le paramètre date2 à l’extérieur puis appeler la méthode getTotal, comme ci-dessous:

 Date date1; Date date2; if(date2 == null || a few more conditions) { date2 = someOtherDate; } getTotal(date1, date2) public Integer getTotal(Date date1, Date date2) { return someList.stream().filter(filter based on date1 and date2).map(Mapping Function).reduce(Addition); } 

Ajoutez juste une ligne comme

 Date date3 = date2; // date3 is effectively final in Java 8. Add 'final' keyword in Java 7. 

juste avant votre lambda et utilisez date3 à la place de date2 .