在ArrayList中存储Future <double> </double>

时间:2014-08-15 20:31:50

标签: java arraylist callable

如果你有

 ArrayList<Future<Double>>calculations = new ArrayList();

或任何Future对象,当callable完成运行时,它会自动从Future值转换为所需的对象类型(在这种情况下为Double),还是更好?

 ArrayList<Double>calculations = new ArrayList();

并简单地检查可调用的完成以添加到ArrayList?

2 个答案:

答案 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
    }
}

并避免单独列出结果列表。