我需要将两个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;
}
两个作为函数参数的ArrayList,它们的大小相同,并且i
的索引ArrayList<String> id
处的元素对应于i
的索引ArrayList<Integer> grades
处的元素(他们正在结对)。
该函数的复杂性显然是O(n),但是我想知道是否可以使用parallelStreams来完成此操作,或者通常使用CPU的所有内核并行进行此操作?
答案 0 :(得分:0)
这里的多线程是一个坏主意,因为您不能确定原始列表的状态。 确保它是线程安全的。
答案 1 :(得分:0)
我同意其他评论,即并行执行可能无济于事。 不过,尝试一下这段代码,看看并行对您是否有好处
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());
}
注意,这里仅映射是在不同线程中完成的。结果将由主线程收集。