如果你有
ArrayList<Future<Double>>calculations = new ArrayList();
或任何Future对象,当callable完成运行时,它会自动从Future值转换为所需的对象类型(在这种情况下为Double),还是更好?
ArrayList<Double>calculations = new ArrayList();
并简单地检查可调用的完成以添加到ArrayList?
答案 0 :(得分:0)
不会进行任何转换。
关于&#34;哪个会更好,&#34;你有点分歧意见。 这取决于您的应用程序,但如果您尝试保留计算列表及其结果,则下面将是一种可靠的方法。 如果您不担心RAM,那么对于&#34;或者&#34;是一个很好的解决方案。问题是&#34;为什么不两者?&#34;
使用下面的代码,您可以维护对计算和结果的引用,并且如果以后需要执行更多操作,则可以使用聚合操作来简化复杂操作。
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
}
});
答案 1 :(得分:0)
据推测,您正在查找结果列表,例如
List<Double> results
从Future计算的结果中填充。
如果没有编写一些代码来填充它,你就不能神奇地获得双打列表。您需要编写哪些代码取决于您想要对结果做什么。例如,您打算如何检查所有Future任务是否已完成?
你可以做一些简单的事情
Double getResult(index i) {
if ( calculations.get(i).isDone() ) {
return calculations.get(i).get();
} else {
// Do something else
}
}
并避免单独列出结果列表。