2016-09-01 1 views
-3

Maintenant que j'ai un moyen de récupérer des objets en parallèle, comment puis-je ajouter ces objets à une liste? J'ai une liste d'objets Future<Site> que j'essaie d'ajouter à un objet ArrayList de Site. Voici ma boucle. Je peux ajouter une instruction d'impression dans la boucle et il révèle que la liste des objets Future<Site> est en effet remplie, mais l'ajout à la liste existante (dernière ligne) ne fonctionne pas.Java: Ajout de l'avenir <obj> à une liste

List<Future<Site>> futures=threadmaker.invokeAll(active_sites.stream().map(site -> new TAG_SCANNER(site, loggr)).collect(Collectors.toList())); 

//Now fetch all the results 
for (Future<Site> result : futures) { 
    //SOUND THE ALARMS (adding to existing list) 
    alarm_sites.add(result.get()); 
} 

EDIT:

Je pensais que la méthode get Future bloquait, en ce que le code ne progresser jusqu'à ce qu'il retourne un résultat. Est-ce que mon erreur consiste à essayer d'ajouter à une liste déjà existante?

+2

Que voulez-vous dire par "ne fonctionne pas"? une erreur? Quel est le type de 'alarm_sites'? – sidgate

+0

@sidgate Cela ne fonctionne tout simplement pas. Aucune erreur et rien ne s'ajoute à la liste. Le site alarm_sites est un objet List of Site. Une chose intéressante cependant est que je peux appeler des méthodes d'objet Site sur result.get() et celles-ci fonctionnent correctement. Donc, ma pensée est 'futures' est une' Liste > ', quand je itère sur cette liste,' result' devrait être un objet 'Future ', et quand j'appelle 'result.get()' je devrais recevoir un objet 'Site', que je devrais pouvoir ajouter à ma liste,' alarm_sites'. – TheFunk

Répondre

-1

Pour une raison quelconque, la création de la liste après ma commande invokeall a résolu mes problèmes. Je ne suis pas sûr de savoir pourquoi la liste préexistante n'a pas fonctionné, mais je signale que la question a été résolue pour le moment, et j'y reviendrai plus tard pour voir ce qui s'est passé.