如何获得期货清单的结果

时间:2017-06-29 11:09:47

标签: java

我有期货清单

List<Future<Boolean>> futures = service.invokeAll( Arrays.asList( callable1, callable2 ));

我需要的是一种获取结果列表的方法

你能在java中提供解决方案吗?

类似于whenAll()...

2 个答案:

答案 0 :(得分:4)

你所追求的是这样的allMatch()方法:

boolean result = futures.stream().allMatch(booleanFuture -> {
    try
    {
        return booleanFuture.get();
    }
    catch (InterruptedException | ExecutionException e)
    {
        throw new RuntimeException(e);
    }
});

如果您真的想要一个结果列表,那么map()就是这样:

List<Boolean> results = futures.stream().map(booleanFuture -> {
    try
    {
        return booleanFuture.get();
    }
    catch (InterruptedException | ExecutionException e)
    {
        throw new RuntimeException(e);
    }
}).collect(Collectors.toList());

答案 1 :(得分:0)

修改@Vampire的结果 如果是很多数据,你也可以使用如下所示的parallelStream

 List<Boolean> results = futures.parallelStream().map(booleanFuture -> {
        try
        {
            return booleanFuture.get();
        }
        catch (InterruptedException | ExecutionException e)
        {
            throw new RuntimeException(e);
        }
    }).collect(Collectors.toList());