用Lambda武裝你的Java: 集合轉換

網上介紹Java 8 lambda和集合新特性的代碼太千篇一概了,我來提供些不同的。雖然很簡單,但也是工業級代碼,不是網上抄來抄去的教學代碼。權當給你們提供一個思路。java

你想把Collection<T>轉換成Collection<R>,或者複製、合併、排序,你能夠用Java 8的stream API,但我以爲書寫起來太繁(每次都要import Collectors, 再寫上Collectors.toXXX),你能夠用如下這個工具類來作。app

Collection<T> elements1 = ..., elements2 = ...;

Collection<R> rs = Colls.map(elements, t->new R(t));
// 或者 Colls.map(elements, R::new);

Collection<T> allElements = Colls.copy(elements1, elements2);
Collection<T> sortedElements = Colls.copySort(comparator, elements1, elements2);

Colls實現以下:工具

import java.util.*;
import java.util.function.Function;

public abstract class Colls {
  public static <T, R> List<R> map(Collection<T> coll, Function<T, R> transformer) {
    List<R> result = new ArrayList<>(coll.size());
    for (T t : coll) {
      result.add(transformer.apply(t));
    }
    return result;
  }

  @SafeVarargs
  public static <T> List<T> copy(Collection<T>... colls) {
    List<T> list = new ArrayList<>();
    for (Collection<T> coll : colls) {
      list.addAll(coll);
    }
    return list;
  }

  @SafeVarargs
  public static <T> List<T> copySort(Comparator<T> comparator, Collection<T>... colls) {
    List<T> list = copy(colls);
    Collections.sort(list, comparator);
    return list;
  }
}

它的實現沒有使用stream API,由於stream是一種強大到能延遲處理和並行處理的API,咱們簡單的集合操做不須要這麼高級的能力。code

目前只寫了三個方法,若是有需求,還能夠擴充更多的方法。orm

相關文章
相關標籤/搜索