Java 在ArrayList中存储Future
如果你有Java 在ArrayList中存储Future,java,arraylist,callable,Java,Arraylist,Callable,如果你有 ArrayList<Future<Double>>calculations = new ArrayList(); 或者任何将来的对象,在这种情况下,当callable完成运行时,它会自动从未来值转换为所需的对象类型Double吗,还是最好 ArrayList<Double>calculations = new ArrayList(); 只需检查可调用项是否已完成以添加到ArrayList?不会进行任何转换 关于哪个更好的问题,你的意见有些分歧
ArrayList<Future<Double>>calculations = new ArrayList();
或者任何将来的对象,在这种情况下,当callable完成运行时,它会自动从未来值转换为所需的对象类型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 getResult(index i) {
if ( calculations.get(i).isDone() ) {
return calculations.get(i).get();
} else {
// Do something else
}
}