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 pas
f 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 peu
foo (f) code>?
Désolé, je n'ai pas fait cela clair. le foo () devrait être foo (f).