若是用過js/jquery、groovy等語言,大概對這樣的代碼比較熟悉:javascript
[1,2,3].map(function(d){...}).grep(function(d){...}).join(',')
這樣的對集合的鏈式操做不只書寫方便,並且更方便閱讀。在java8中使用集合流和lamda表達式也能夠達到這個效果。java
本文提供一個簡單的工具類,用java模擬集合鏈式操做,能夠在非java8-的環境中使用。jquery
使用方法以下:app
new CollectionPipe<Integer>(new Integer[]{1,2,3}) .filter(new Filter<Integer>(){...}) .map(new Mapper<Integer,String>(){...}) .join(",") ///////////// CollectionPipe.fromArray(new double[]{1.5d,1.6d,2.8d}) .filter(new Filter<Double>(){...}) .map(new Mapper<Double,Integer>(){...}) .join(",")
完整代碼爲:工具
// S--> 集合元素類型 public class CollectionPipe<S> { List<S> source=new ArrayList<S>(); public CollectionPipe() { super(); } public CollectionPipe(Collection<? extends S> collection) { super(); source.addAll(collection); } public CollectionPipe(S[] array){ super(); for(S item:array) source.add(item); } // O-->映射後集合類型 public <O> CollectionPipe<O> map( Mapper<S,O> mapper) { List<O> result=new ArrayList<O>(); for(S item:source) result.add(mapper.map(item)); return new CollectionPipe<O>(result); } public CollectionPipe<S> filter(Filter<S> filter){ Iterator<S> it=source.iterator(); while(it.hasNext()){ if(!filter.filter(it.next())) it.remove(); } return this; } public String join(String seg){ String result=""; if(source==null) return result; int index=0; for(Object o:source){ index++; if(index==source.size()) result+=String.valueOf(o); else result+=String.valueOf(o)+seg; } return result; } public List<S> getList() { return source; } public Set<S> getSet(){ return new HashSet<S>(source); } public static CollectionPipe<Double> fromArray(double [] array){ CollectionPipe<Double> result=new CollectionPipe<>(); for(double item:array) result.source.add(item); return result; } public static CollectionPipe<Integer> fromArray(int [] array){ CollectionPipe<Integer> result=new CollectionPipe<>(); for(int item:array) result.source.add(item); return result; } } public interface Mapper<I,O> { O map(I item); } //true-->保留;false-->捨棄 public interface Filter<I> { boolean filter(I item); }
讀者能夠自行擴展從不一樣的源生成pipe,或者加上並行功能。this