[英]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.