星空网 > 软件开发 > Java

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;		}				@Override		public 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>() {				@Override				public Integer process(SameNameSinger item) {					return item.getNameIndex();				}						});

  

 

 




原标题:Java LinqCollection 仿Linq的list常用函数

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

急!国人原告再次发难!有上架这些产品的卖家赶紧下架!:https://www.kjdsnews.com/a/1600906.html
亚马逊选品推荐(仅供参考):鲨鱼毯连体衣:https://www.kjdsnews.com/a/1601905.html
小红书关停自营电商业务:https://www.kjdsnews.com/a/1601906.html
AI大模型数据争夺战:https://www.kjdsnews.com/a/1601907.html
定了!9月20日,亚马逊全球开店 2024华南大区启动大会深圳站强势来袭:https://www.kjdsnews.com/a/1601908.html
又一重大改版!亚马逊前置评论版块!:https://www.kjdsnews.com/a/1601909.html
5月贾汪好玩的地方 贾汪哪有好玩的地方:https://www.vstour.cn/a/363179.html
23点聊电商:新质生产力加速数字贸易发展 卓尔智联集团实现营收利润双增长 :https://www.kjdsnews.com/a/1836411.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流