[英]Storing Future<Double> in ArrayList
如果你有
ArrayList<Future<Double>>calculations = new ArrayList();
或与此相关的任何Future对象,它将在可调用对象完成运行时自动从Future值转换为所需的对象类型(在这种情况下为Double),还是最好让它具有
ArrayList<Double>calculations = new ArrayList();
并简单地检查可调用项的完成以添加到ArrayList中?
不会进行任何转换。
对于“哪个更好”的问题,您在意见上有些分歧。 这取决于您的应用程序,但是如果您要保留计算列表及其结果,则以下将是一种可靠的方法。 如果您不担心RAM,那么“无论是哪个”问题的一个很好的解决方案是“为什么不同时使用两个?”
使用以下内容,您可以同时维护对计算和结果的引用,并且可以使用聚合操作,以便日后需要执行更多操作时,可以更轻松地执行复杂的操作。
List<Future<Double>> calculations = new ArrayList();
List<Double> results = new ArrayList();
calculations.stream().forEach((Future<Double> _item) -> {
try {
results.add(_item.get());
} catch (InterruptedException ex) {
// do something
} catch (ExecutionException ex) {
// do something
}
});
大概您是在以下结果列表中
List<Double> results
从“未来”计算的结果中填充。
如果没有编写一些代码来填充它,就无法神奇地获得一个double列表。 您需要编写什么代码取决于要对结果执行什么操作。 例如,您打算如何检查所有“未来”任务是否已完成?
您可以做一些简单的事情
Double getResult(index i) {
if ( calculations.get(i).isDone() ) {
return calculations.get(i).get();
} else {
// Do something else
}
}
并避免单独列出所有结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.