[英]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是该函数的参数,但它们在索引相同的大小和元件i
的ArrayList<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.