国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java LinqCollection 仿Linq的list常用函數

2019-11-15 01:17:19
字體:
來源:轉載
供稿:網友
java LinqCollection 仿Linq的list常用函數

目前支持find,findAll,sort,select,remove等,java不支持lamda函數,因此用接口代替

public interface Fun<T1,T2> {public T2 PRocess(T1 item);}public interface Predicate<T> {/** * 是否滿足 * @param item * @return */public boolean evaluate(T item);}

接下來是具體的實現:

public class LinqCollection<T> extends java.util.ArrayList<T> {/** * serialVersionUID */private static final long serialVersionUID = -5042194313851746204L;public LinqCollection(){super();}public LinqCollection(Collection<? extends T> c){super(c);}/** * 查找首條符合條件的記錄 * @param predicate 條件 * @return */public T find(Predicate<T> predicate){for(T item: this){if(predicate.evaluate(item)){return item;}}return null;}/** * 按條件刪除 * @param predicate */public void remove(Predicate<T> predicate){ ListIterator<T> i = this.listIterator(); while(i.hasNext()){ T c = i.next(); if(predicate.evaluate(c)){ i.remove(); } }}class ComparableItem<T> implements Comparable{T data;Fun<T,  ?> keySelect =null;public  <T2 extends Comparable<? super T2>> ComparableItem(T item,Fun<T,T2> keySelect){this.keySelect = keySelect;this.data = item;}@Overridepublic int compareTo(Object o) {return ((Comparable)(this.keySelect.process(this.data))).compareTo((Comparable)(this.keySelect.process(((ComparableItem<T>)o).data)));}}/** * 選擇 * @param keySelect * @return */public <T2> LinqCollection<T2> select(Fun<T,T2> keySelect){LinqCollection<T2> result = new LinqCollection<T2>();for(T item : this){result.add(keySelect.process(item));}return result;}/** * 按指定字段排序 * @param keySelect(選擇排序的字段) */public <T2 extends Comparable<? super T2>> void sort(Fun<T,T2> keySelect){List<ComparableItem<T>> items = Lists.newArrayList();for(T item : this){items.add(new ComparableItem<T>(item, keySelect));}   Collections.sort(items);       ListIterator i = this.listIterator();        for (int j=0; j<items.size(); j++) {            i.next();            i.set(items.get(j).data);        }}/** * 查找所有符合條件的記錄 * @param predicate * @return */public LinqCollection<T> findAll(Predicate<T> predicate){LinqCollection<T> result = new LinqCollection<T>();for(T item: this){if(predicate.evaluate(item)){result.add(item);}}return result;}/** * 是否存在 * @param predicate * @return */public boolean exist(Predicate<T> predicate){return this.find(predicate)!=null;}}

  使用舉例:

cleanItems.sort(new Fun<SameNameSinger, Integer>() {@Overridepublic Integer process(SameNameSinger item) {return item.getNameIndex();}});

  

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松原市| 晴隆县| 江华| 大名县| 文安县| 清镇市| 鄂托克前旗| 南投县| 双流县| 澎湖县| 娄烦县| 林甸县| 明溪县| 南京市| 清苑县| 巍山| 沂源县| 侯马市| 包头市| 南川市| 永济市| 曲松县| 梨树县| 绩溪县| 兰州市| 进贤县| 通化市| 渝北区| 甘肃省| 昆明市| 周至县| 巴青县| 璧山县| 海宁市| 涿州市| 垦利县| 鲁甸县| 闵行区| 化州市| 宣威市| 开封县|