本次需求是因为jpa不支持动态sql拼接,我又懒得去在spring boot上面集成query dsl,所以采取删除list数组中不满足条件的数据
开始
String Code=null; //我的业务需求代码
String posiName=null; //我的业务需求代码
List<JobApplyForm> jobApplyForms = new ArrayList<>();
//我将查询出来的数组放到我的list中。 JobApplyForm是我的实体,可以当作Object来理解。
//新想到的逻辑实验一下
Iterator<JobApplyForm> it = jobApplyForms.iterator(); //将list类型的转为Iterator,
while(it.hasNext()){ //判断是否有下一个元素,已下角标为准,并且每读过一个下角标都会记录,当读到最后一个下角标时会返回null
JobApplyForm x = it.next(); //我获取的是我的实体,
if(Code !=null) {
if(!x.getCode().equals(Code)){ //进行逻辑判断
it.remove(); //进行删除,此处需要说明,这里的删除实际映射的地址是jobApplyForms 这个的地址,也就是说当执行将list类型的转为Iterator这个操作的时候,不是赋值,是等值的关系,it中删除的元素,在jobApplyForms这个list中也会删除。
}
}
}
//假设上面的数据总数是五条,满足逻辑的条件只有三条,那么删除两条,当执行完上述的代码后。it中会显示三条数据,jobApplyForms也会显示三条数据,
it = jobApplyForms.iterator(); //需要重新初始化Collection的iterator()。PS:如果没有这一行,就会出现无法遍历it的情况,原因是,关于it这迭代器,你已经读到最后一位了。下一位没有了,你要是向重新读一遍,就需要初始化一次迭代器。
while(it.hasNext()){
JobApplyForm x = it.next();
if(null !=posiName) {
if(!x.getPosition().equals(posiName)){
it.remove();
}
}
}
it = jobApplyForms.iterator(); //再一次的初始化遍历器。
List<JobApplyForm> myList=IteratorUtils.toList(it); //使用Apache Common Collections 将Iterator<JobApplyForm> 转为List<JobApplyForm>
上述的例子只是为了讲解一下Iterator 多次遍历需要进行初始化,如果你遇到了jpa无法动态拼接sql的情况,而实际需求又需要大量动态拼接sql。个人建议马上集成query dsl,别学我通过删除list来达到多条件查询的目的。这不是好办法!