一个Java泛型方法的实例, 请各位方家指正

网上搜索关于java泛型方法的例子不多而且比较简单,这里我贴一个自己项目中的例子,望方家批评指正。
设有类集合List<CTrump> lst,需要一些集合过滤操作,
比如针对CTrump.ID值的过滤;
或CTrump.Val的某个值域的判定;
亦或CTrump中某个属性的某种条件判断, 如CTrump.Name!=null; 等等
当然可以把这些操作都直接定义在CTrump类中,也可以抽象到一些Interface中,但使用泛型方法应该更简洁和灵活些。

public class CSetFilter
{
/**
* 单数值比较过滤器
* @param src 源对象集合(待过滤对象集合)
* @param val 指定要比较的数值
* @param compor 比较例程(用于建立类T与数值V间的比较方式)
* @return 过滤后输出的对象集合
*/
public static <T, V extends Number, C extends ICompVal<T,V>> List<T> ValueFilter(List<T> src, V val, C compor)
{
ArrayList<T> lst = new ArrayList<T> (src.size());
for(T t:src)
if(compor.compare(t, val))
lst.add(t);
return lst;
}
/**
* 条件过滤器
* @param src 源对象集合(待过滤对象集合)
* @param cond 条件例程(用于指定类T的某种需要测试的条件)
* @return 过滤后输出的对象集合
*/
public static <T, C extends ICondition<T>> List<T> ConditionFilter(List<T> src, C cond)
{
ArrayList<T> lst = new ArrayList<T> (src.size());
for(T t:src)
if(cond.condition(t))
lst.add(t);
return lst;
}

/**
* 值域过滤器
* @param src 源对象集合(待过滤对象集合)
* @param vmin 指定值域下标
* @param vmax 指定值域上标
* @param compor 比较例程(用于建立类T与指定值域间的比较方式)
* @return 过滤后输出的对象集合
*/
public static <T, V extends Number, C extends IValRng<T,V>> List<T> RngFilter(List<T> src, V vmin, V vmax, C compor)
{
ArrayList<T> lst = new ArrayList<T> (src.size());
for(T t:src)
if(compor.range(t, vmin, vmax))
lst.add(t);
return lst;
}
}
public interface ICompVal<T, V extends java.lang.Number>
{
boolean compare(T t, V v);
}
public interface ICondition<T>
{
boolean condition(T t);
}
public interface IValRng<T, V extends Number>
{
boolean range(T t, V vmin, V vmax);
}

实例化
    
public void testValueFilter(int id,int n) {
List<CTrump> tlst = CTrump.LoadByPID(id);
List<CTrump> lst = CSetFilter.ValueFilter(tlst, n, new ICompVal<CTrump,Integer> () {
public boolean compare(CTrump t, Integer n)
{
return t.getID()>n;
}
});
for(CTrump t:lst)
System.out.println(t.getID());
}

如此以来,类CTrump与那些繁琐的比较例程解耦了,只有用到集合过滤时,才由那些比较接口建立起彼此的联系。这种泛型思想,原来在开发C++项目时常常用到,用Java一样可以实现。有不少人对Java的泛型颇有微词,确实,Java不能完全实现C++的泛型,但也不像一些人说的那样无用。
关于集合类的过滤器,还有什么好的实现手段?望各位方家不吝赐教。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值