2013-04-26 3 views
3

J'essaie d'utiliser Akka Futures pour lire plusieurs fichiers et passer chaque ligne à un appelable. Mes callables sont des analyseurs syntaxiques pour un fichier spécifique. Ainsi, people.txt peut remplir des objets de type Person. Chaque ligne peut contenir jusqu'à 50 champs nécessitant chacun une validation et des opérations pour remplir l'objet.Akka Futures guidance

Je voudrais obtenir quelque chose comme Future <Iterable<Person>> dos, mais pas sûr que je reçois que de

BufferedReader reader = new BufferedReader(
    new InputStreamReader(getInputStream(), "UTF-16")); 

while((line = reader.readLine()) != null) { 
    // call callable here for each line 
    // PersonParser that implements Callable<Person> 
} 
reader.close(); 

Comment puis-je structurer pour obtenir dans mon futur objet. Tout conseil est le bienvenu.

Merci!

Répondre

4

Utilisez la méthode Futures.sequence pour créer un Future<Iterable<Person>> d'un Iterable<Future<Person>>:

List<Future<Person>> personFutures = new ArrayList<Future<Person>>(); 
BufferedReader reader = 
    new BufferedReader(new InputStreamReader(getInputStream(), "UTF-16")); 

while((line = reader.readLine()) != null) { 
    PersonParser parser = new PersonParser(line); 
    personFutures.add(Futures.future(parser, system.dispatcher())); 
} 
reader.close(); 

Future<Iterable<Person>> personsFuture = 
    Futures.sequence(personFutures, system.dispatcher()); 
+1

Désolé pour le downvote. Je l'ai doigté sur mon téléphone et je ne semble pas pouvoir le changer maintenant à moins de le modifier. Si vous éditez votre commentaire, je vais l'augmenter pour vous. Encore pardon. – cmbaxter

+0

Pas de soucis et merci pour l'explication. – Tilo