Akka期货指导

时间:2013-04-26 22:01:15

标签: java multithreading akka

我正在尝试使用Akka Futures读取多个文件并将每一行传递给可调用的。 我的callables是特定文件的解析器。所以people.txt可能会填充Person类型的对象。 每行最多可包含50个字段,每个字段都需要验证和操作来填充对象。

所以我想得到类似的东西 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();

我如何构建它以在我的未来对象中获取它。欢迎任何建议。

谢谢!

1 个答案:

答案 0 :(得分: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());