2013-04-26 4 views
3

Я пытаюсь использовать Akka Futures для чтения нескольких файлов и передачи каждой строки вызываемому. Мои вызывающие элементы - это синтаксические анализаторы для определенного файла. Таким образом, people.txt может заполнять объекты типа Person. Каждая строка может содержать более 50 полей, каждая из которых нуждается в проверке и операции для заполнения объекта.Руководство Akka Futures

Так что я хотел бы получить что-то вроде Future <Iterable<Person>> назад, но не знаю, как я понимаю, что от

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(); 

Как можно структурировать это, чтобы получить это в моем будущем объекте. Любые советы приветствуются.

Спасибо!

ответ

4

Используйте метод Futures.sequence создать Future<Iterable<Person>> из 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

Извините за downvote. Я толкнул его на свой телефон, и теперь я не могу его изменить, если вы его не отредактируете. Если вы отредактируете свой комментарий, я выберу его для вас. Еще раз извините. – cmbaxter

+0

Не беспокойтесь и спасибо за объяснение. – Tilo