Comme vous le savez, "la variable locale définie dans une portée entorcière doit être définitive ou efficace". J'ai donc le code suivant ligne 1 imprimé 1 code> et la ligne 2 imprimé 0 code>. Il semble que la liste filteredarilines code> n'était pas remplie. Des idées pourquoi? Et comment puis-je obtenir les valeurs dans l'expression de Lambda disponible à l'extérieur? Merci. P> p>
3 Réponses :
Je ne sais pas ce que Par conséquent, lorsque vous imprimez RDD code> est et quel rdd.map () code> fait, mais le fait que vous y passez une expression lambda ne signifie pas que Il est exécuté immédiatement (ou du tout). P>
filteredarilines.size () code> Dans la dernière ligne de votre extrait de votre extrait, l'expression Lambda n'a probablement pas encore exécuté, la liste code> est toujours vide. p>
Y a-t-il une façon de forcer un peu de code après RDD.MAP () est terminé?
Vous pouvez mapper votre résultat directement dans la liste comme celle-ci:
List<Airline> filteredAirlines = rdd.map(f -> {
......
results = foo();
System.out.println(results.getFilteredAirlines().size());
return results.getFilteredAirlines();
}).collect(Collectors.toList());
Si {...} code> n'utilise pas f code>, quel est le point de l'expression Lambda?
C'est exact. Je n'ai pas pensé à l'affaire qu'il n'utilise même pas f code>.
Utilisez des accumulateurs comme vous l'avez suggéré. Il fonctionne comme un charme. Merci!!
Bien fait, j'ai édité le titre de votre question pour le rendre plus expressif.
La fermeture à l'intérieur code> carte code> n'utilise pas réellement
f code>, qui représente un objet de la collection code> RDD code>. Étant donné que vous n'utilisez pasf code>, ni générant un objet de la compagnie code> code>, donc l'expression Lambda n'a aucun sens.Totalement d'accord mais peut-être que son
foo () code> est un peufoo (f) code>?Désolé, je n'ai pas fait cela clair. le foo () devrait être foo (f).