网上介绍Java 8 lambda和集合新特性的代码太千篇一律了,我来提供些不一样的。虽然很简单,但也是工业级代码,不是网上抄来抄去的教学代码。权当给大家提供一个思路。
你想把Collection<T>
转换成Collection<R>
,或者复制、合并、排序,你可以用Java 8的stream API,但我觉得书写起来太繁(每次都要import Collectors, 再写上Collectors.toXXX),你可以用以下这个工具类来做。
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,我们简单的集合操作不需要这么高级的能力。
目前只写了三个方法,如果有需求,还可以扩充更多的方法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。