定义一个断言接口,里面只有一个抽象方法。
public interface Predicate<E> {
boolean test(E e);
}
设计一个Lsit,直接继承ArrayList
public class SuperList<E> extends ArrayList<E>{
private static final long serialVersionUID=1L;
SuperList<E> filter(Predicate<E> p){
for(int i=0;i< this.size();i++){
if(!p.test(this.get(i))){
this.remove(i);
i--;
}
}
return this;
}
@Override
public String toString(){
return super.toString();
}
}
filter 方法直接返回this,方便链式调用。
测试:
SuperList<User> list=new SuperList<>();
list.add(new User("001","夏洛特",null,roleEnum.刺客.getCode()));
list.add(new User("002","阿狸",null,roleEnum.射手.getCode()));
list.add(new User("003","刘禅",null,roleEnum.坦克.getCode()));
list.add(new User("004","亚瑟",null,roleEnum.坦克.getCode()));
list.add(new User("005","秀儿",null,roleEnum.坦克.getCode()));
SuperList<User> filter =list.filter(new Predicate<User>(){
@Override
public boolean test(User e){
return e.getRole()==roleEnum.坦克.getCode();
}
}).filter(new Predicate<User>(){
@Override
public boolean test(User e){
return !e.getUname().equals("秀儿");
}
});
System.out.println(filter);
查询出所有的坦克类型,并且名字不是秀儿的数据。
结果:
[User [uid=003, uname=刘禅, role=2], User [uid=004, uname=亚瑟, role=2]]
因为JDK1.6不支持lamda表达式,所以只能使用匿名内部类了。
分类:
一些零碎代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)