1. 程式人生 > >java 集合分割和並行處理

java 集合分割和並行處理

在專案中經常會遇到一個很大的List集合需要處理,如果直接迴圈遍歷的話效能會很差,需要考慮對list進行處理,本次提供一種思路,將大集合拆分為多個小的集合,同時對這些小集合進行並行處理;
下面提供兩種集合分割的方法:

一、將一個list均分成n個list

/**
   * 將一個list均分成n個list
   * 
   * @param source
   * @param n : 小集合的個數
   * @return
   */
  public <T> List<List<T>> subWithNum(List<T> source, int
n) { List<List<T>> result = new ArrayList<List<T>>(); int remaider = source.size() % n; // (先計算出餘數) int number = source.size() / n; // 然後是商 int offset = 0;// 偏移量 for (int i = 0; i < n; i++) { List<T> value = null; if (remaider > 0) { value = source.subList(i * number + offset, (i + 1
) * number + offset + 1); remaider--; offset++; } else { value = source.subList(i * number + offset, (i + 1) * number + offset); } result.add(value); } return result; }

二、將一個list按照指定大小分割

/**
   * 按指定大小,分隔集合,將集合按規定個數分為多個部分
   * 
   * @param source
   * @param
len:集合的長度 * @return */
public <T> List<List<T>> subWithLen(List<T> source, int len) { if (source == null || source.size() == 0 || len < 1) { return null; } List<List<T>> result = new ArrayList<List<T>>(); int count = (source.size() + len - 1) / len; for (int i = 0; i < count; i++) { List<T> value = null; if ((i + 1) * len < source.size()) { value = source.subList(i * len, (i + 1) * len); } else { value = source.subList(i * len, source.size()); } result.add(value); } return result; }

利用java 8 Stream流的方式對list併發遍歷

list.parallelStream().parallel().forEach((number) -> {
    System.out.println(number);
});