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?
Que voulez-vous dire par "ne fonctionne pas"? une erreur? Quel est le type de 'alarm_sites'? – sidgate
@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