首页 > 解决方案 > 使用并行流生成列表

问题描述

我有一个 Json 字符串列表,其中包含电影列表。我需要收集这些电影,处理它们并将它们存储在磁盘中。我正在考虑使用并行流方法来收集电影并测试其性能。我的方法是这样的:

以下方法生成一个电影列表

protected abstract List<T> parseJsonString(JsonIterator iter);

此方法包含一个并行流,该流收集流中生成的所有列表( List<List<Movies)) 的列表:

public CompletableFuture<List<List<T>>> parseJsonPages(List<CompletableFuture<String>> jsonPageList)
{
    return jsonPageList.parallelStream()
            .map( jsonPageStr -> CompletableFuture.supplyAsync( () -> {
                try {
                    return parseJsonString(JsonIterator.parse( jsonPageStr.get() ) );
                }
                catch (InterruptedException | ExecutionException e) {
                    e.printStackTrace();
                    System.exit(-1);
                }
                return null;
            } ) )
            .collect( ParallelCollectors.toFuture( Collectors.toList() ) );
}

这种方法的问题是流将生成电影列表,然后将所有列表附加到列表中。你认为这是收集所有这些电影的有效方式吗?我是否应该将所有列表中的电影合并到一个列表中,而不是仅将整个列表附加到列表中(即使这也需要一些时间)。如果是这样,我该如何执行这样的任务?

提前致谢。

标签: javalistmergeparallel-processingstream

解决方案



推荐阅读