本人java小白一个,最近学了迭代,故记之。
迭代故名思意,就是无限的循环,它跟for循环也是很相关的。在这里,我总结下,什么事迭代,迭代就是,无限循环自己,然后一个推出的条件。
在这里,就用一个例子来说明。
现在有一张单位表,在这张单位表里面有一些,按层级显示的数据。
如:
数据库方面:
实体方面:
/**
* 子集
* @return
*/
private List<organization> children = new ArrayList<organization>();
增加一个这个单位下面的二级菜单,list
怎么层级显示呢?
1.先查询父节点为Null的所有顶级list,for循环这个List,并且传入循环出的单个元素,去调用迭代方法查询它的下一级
/**
* 查询所有
*
*/
public List<organization> findAllOrganization() {
List<organization> orgList = this.selectAllFunction();//这个方法就是查询父节点为null
for (organization ora : orgList) {
diedai_organization(ora);//for循环这个list,给它添加子节点
}
return orgList;
}
2.,根据传入的元素,获取其id,下一级的父节点就是这个传来的id,是否相等,查询出一个List,
并且 for循环此list,然后将此list里面的元素添加到当前传入的元素的id,并且其子节点添加for循环而出的单级元素。到这里
可以循环出两个等级,但是,无限还是达不到,要想达到无限,给这个单元素在进行一次跌代。就可以达成了。
/**
* 迭代所有
* 无限循环
*/
private void diedai_organization(organization o){
//这是无限迭代的退出条件
if( o == null ){
return;
}
List<organization> temp = this.selectwaijia(o.getOrid());//这个方法就是根据传来的主键去跟所有节点的父节点去匹配
for(organization organizations : temp ){
o.getChildren().add(organizations);//这个只是二级,达不到无限,所以,下面才是关键
diedai_organization(organizations);//这样就可以达到无限了啊直到为null,停止运行
}
}
3.前台页面处理
新建两个jsp页面,一个是显示单位页面,一个是迭代循环页面
<c:if test="${fn:length(list) == 0}">
<tr>
<td colspan="6">
没有查询到相关数据
</td>
</tr>
</c:if>
<c:import url="../organizationModel/diedai_organization.jsp"></c:import>
在这里,我是使用导入的方式来进行二次的查询
<body>
<c:forEach var="cur" items="${list}" varStatus="vs">
<tr>
<td align="left">
<c:forEach begin="0" end="${level}" step="1">
//
</c:forEach>
${cur.orName}
</td>
</tr>
<c:if test="${fn:length(cur.children) > 0}"><!-- 如果有childen -->
<c:set var="level" value="${level + 1}" scope="request" /><!-- 循环一次子列表,level+1 -->
<c:set var="list" value="${cur.children}" scope="request" /><!-- 注意此处,子列表覆盖treeList,在request作用域 -->
<c:import url="../organizationModel/diedai_organization.jsp"></c:import><!-- 再次调用 -->
</c:if>
</c:forEach>
<c:set var="level" value="${level - 1}" scope="request" /><!-- 退出时,level-1 -->
</body>
这是效果图:
这就是迭代单位,层级显示。这是个评论的平台,如果有不足之处,欢迎斧正。