簡體   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