JSP中遍历List、Map
来源:互联网 发布:移动互联网 大数据 编辑:程序博客网 时间:2024/06/07 18:57
在实际项目中,经常会遇到在jsp页面中(一遍是列表展现页面)展现后台传递过来的List中的场景。
前几天遇到一个比较复杂一点的,涉及到前台JSP列表页面首先遍历后台传递的List,然后List中的每个元素作为另一个Map中的Key,在遍历中,需要根据List中的元素作为key,获取后台Map中的value值,然后本身Map中的Value值又是一个List。
简要描述下场景,原始数据截图如下:
需求:统计表格中出现频次最多的辩证(证型),然后在相应的辩证下再统计频次最多的中药。
设计思路:辩证(证型)频次统计比较简单,直接List倒序即可(需要List中保存的对象实现Comparable接口),前台页面循环List即可。该辩证(证型)下的中药频次统计比较复杂,考虑到需要在JSP中遍历List之后根据List中的元素取得对应频次统计,则使用Map。
后台组装代码如下:
///证型频次分析:在把证型统计出来之后,在连接着这个证型,在这个证型的下面能不能再根据这一个证型下面的用药频次再做一个统计分析 zhengMingAnalyseList = bingLiService.getZhengMingAnalyseList(new ZhengMingAnalyse()); List<BingLiChuFangAnalyse> bingLiChuFangAnalyseList = null;// /*******创建一个map结构,key是证型,value是该证型下用药最多的前10种List<中药,频数>*****/// HashMap<ZhengMingAnalyse,List<ZhongYaoAnalyse>> zhengMingZhongYaoCountMap = new HashMap<ZhengMingAnalyse,List<ZhongYaoAnalyse>>(); ///循环频数前10的证型,查找出这些证型下所有的处方 for (ZhengMingAnalyse zhengMingAnalyse : zhengMingAnalyseList) { ///这里的bingLiChuFangAnalyseList是该证型下所有的处方,SQL中直接控制存储在chufang字段 bingLiChuFangAnalyseList = bingLiService.getZhengMingChuFangAnalyseList(zhengMingAnalyse); ///先使用map,利用key的不重复性统计该证型下中药的频次 HashMap<String,Integer> zhongYaoCountMap = new HashMap<String,Integer>(); for (BingLiChuFangAnalyse bingLiChuFangAnalyse : bingLiChuFangAnalyseList) { ///这里过滤掉非中药名的汉字:(单包)、(冲服) String chufang = bingLiChuFangAnalyse.getChufang().replaceAll("(单包)", "").replaceAll("(冲服)", "").replaceAll("(包)", ""); String[] chufangArr = chufang.split(","); for (int i = 0; i < chufangArr.length; i++) { ///因为使用","分割的中药名格式是:青陈皮各9g 或者 怀牛膝12,需要抓取出单纯的汉字中药名 String zhongYaoName = FilterStrUtil.getChinese(chufangArr[i]); if(null != zhongYaoName && !"".equals(zhongYaoName)){ if(zhongYaoCountMap.containsKey(zhongYaoName)){ int count = zhongYaoCountMap.get(zhongYaoName); count = count + 1;///出现一次,频数加1。 zhongYaoCountMap.put(zhongYaoName, count); }else{ zhongYaoCountMap.put(zhongYaoName, 1); } } } } ///走到这里,Map:zhongYaoCountMap中已经保存了该证型下所有的中药频数,此时需要将map转成list,方便排序 List<ZhongYaoAnalyse> zhongYaoCountList = new ArrayList<ZhongYaoAnalyse>(); Iterator it = zhongYaoCountMap.keySet().iterator(); while (it.hasNext()) { String key = it.next().toString(); zhongYaoCountList.add(new ZhongYaoAnalyse(key,zhongYaoCountMap.get(key))); } Collections.sort(zhongYaoCountList);///针对zhongYaoCountList排序。 ///将最终的结果保存到zhengMingZhongYaoCountMap对象传递到前台 ////创建一个map结构,key是证型,value是该证型下用药最多的前10种List<中药,频数>*****/ ////HashMap<ZhengMingAnalyse,List<ZhongYaoAnalyse>> zhengMingZhongYaoCountMap = new HashMap<ZhengMingAnalyse,List<ZhongYaoAnalyse>>(); zhengMingZhongYaoCountMap.put(zhengMingAnalyse, zhongYaoCountList); } break;
传递到前台的有两个集合对象:zhengMingAnalyseList和zhengMingZhongYaoCountMap。
前台JSP展现代码:
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <%@ include file="/base.jsp"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><table width="100%" class="sTable" > <tr class="tHead tCenter"> <td class="sTd" width="3%" style="display:none"> <input type="checkbox" id="checkFlag" name="checkFlag" onclick="checkAll();" title="全选" /> </td> <td width="20%" nowrap="nowrap">证型</td> <td width="10%" nowrap="nowrap">频数统计(次)</td> <td width="67%" nowrap="nowrap" align="left">该证型下中药频数统计(次)</td> <td style="display:none">ID</td> </tr> <% int count =0; int num = 0; %> <s:iterator value="zhengMingAnalyseList" status="var" > <% num = count % 2; %> <tr class="tChoice<%=num%>" onmouseover='this.className="tChoice"' onmouseout='this.className="tChoice<%=num%>"'> <td class="sTd" nowrap="nowrap" onClick="zhankaiOrHebing('row1')" style="display:none"> <img id="imagerow1" src="<%=request.getContextPath()%>/jsp/js/img/plus.gif" /> </td> <td class="sTd" nowrap="nowrap" >c ${zhengMingAnalyseList[var.index].zhengming} </td> <td class="sTd" nowrap="nowrap" align="center"> ${zhengMingAnalyseList[var.index].count} </td> <td class="sTd" nowrap="nowrap" > <!-- 循环该证型下的中药频数统计列表 --> <c:forEach items="${zhengMingZhongYaoCountMap}" var="map"> <c:if test="${fn:containsIgnoreCase(fn:trim(map.key.zhengming),fn:trim(zhengMingAnalyseList[var.index].zhengming))}" var="true"> <c:forEach items="${map.value}" var="zhongYaoCountList"> ${zhongYaoCountList.name}:${zhongYaoCountList.count}、 </c:forEach> </c:if> </c:forEach> </td> </tr> <% count++; %> </s:iterator></table></body><script type="text/javascript"></script></html>
展示结果如下:
0 0
- JSP中遍历List、Map
- JSP中遍历map里的list,或者 遍历list里的map
- jsp 中用forEach遍历 List 和Map
- jsp页面遍历List<Map<String,Object>>
- map到jsp中遍历
- Map在jsp页面中的遍历(Map<String, List<T>>)
- jsp遍历List<Map<String,Object>>,输出<Map<String,Objectr>>
- 模板中 List 和 Map 的遍历
- freemarker中遍历list<map<String,String>>
- freemarker中遍历list<map<String,String>>
- freemaker中list与map的遍历
- Mybatis中遍历List、Set、Array、Map
- Java 中list和map遍历删除
- JSP 中使用EL遍历MAP
- JSP 中使用EL遍历MAP .
- struts2中jsp页面遍历map对象
- struts2中jsp页面遍历map对象
- jsp 页面中用struts2 标签遍历集合(list map)
- Android Studio 2.2.1,2.2.2 编辑build.gradle文件卡
- AES加密中文乱码
- 封装一个SqliteDataBase工具类
- 当Python遇到PIL|pytesser图像处理出错
- java基础巩固----Cooke技术和Session技术详解
- JSP中遍历List、Map
- Spring框架学习(第二讲)
- 主流浏览器内核介绍(前端开发值得了解的浏览器内核历史)
- 程序设计语言简史
- 计算机科学中最重要的32个算法
- Spring学习笔记(五)
- iOS 降低scrollview滑动速度
- AndroidStuido中找不到cache.properties文件
- AIDL学习(三)---Binder连接池