繁体   English   中英

将两个 ArrayList 并行合并到一个 ArrayList?

[英]Merging two ArrayLists to one ArrayList parallelly?

我需要将两个 ArrayList 合并到一个 ArrayList 中,但我需要非常快地完成,因为执行此操作的函数被多次调用。 这是我的功能版本:

  public ArrayList<Pair<String, Integer>> mergeIdWithGrade(ArrayList<String> id, ArrayList<Integer> grades) {

    ArrayList<Pair<String, Integer>> list = new ArrayList<>();
    for(int i = 0; i< id.size(); i++)
    {
        list.add(new Pair<String,Integer>(id.get(i), grades.get(i)));
    }
    return list;
}

两个的ArrayLists是该函数的参数,但它们在索引相同的大小和元件iArrayList<String> id对应于元件在索引i的的ArrayList<Integer> grades (他们正在对)。 该函数的复杂性显然是 O(n),但我想知道这可以使用 parallelStreams 来完成,还是通常使用我的 CPU 的所有内核并行完成?

多线程在这里是一个坏主意,因为您无法确定原始列表的状态。 确保它是线程安全的。

我同意其他评论,即并行执行可能无济于事。 不过,试试这段代码,看看并行是否对你有益

    public List<Pair<String, Integer>> mergeIdWithGrade(List<String> id, List<Integer> grades) {
      return IntStream
            .range(0, Math.min(id.size(), grades.size()))
            .parallel() // try with and without it
            .mapToObj(i -> new Pair(id.get(i), grades.get(i)))
            .collect(Collectors.toList());
    }

注意,这里只是映射是在不同线程中完成的。 结果将由主线程收集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM