java反射获取聚合<List>属性字段

该博客介绍了使用Java反射获取聚合<List>属性字段的方法。需动态传入Class类型,反射到启动的List,根据泛型获取具体对象属性。还给出了针对List类型的判断代码片段,并对代码中的关键方法进行了解释。

java反射获取聚合<List>属性字段

2016年09月30日 11:59:40 阅读数:7997 标签: javareflect 更多

个人分类: java

需要动态的传入一个Class的类型,然后反射到启动的List,根据List里定义的泛型,知道其中List的具体对象的各种属性。 

代码

 
  1. import java.lang.reflect.Field;

  2. import java.lang.reflect.ParameterizedType;

  3. import java.lang.reflect.Type;

  4. import java.util.ArrayList;

  5. import java.util.HashMap;

  6. import java.util.HashSet;

  7. import java.util.List;

  8. import java.util.Map;

  9. import java.util.Set;

  10.  
  11. import com.meyacom.ruleapp.dto.Ztree;

  12.  
  13. public class test {

  14.  
  15. public static void main(String[] args) throws ClassNotFoundException {

  16. Class<?> apply = Class.forName("com.chac.ruleapp.bom.ApplyTest");

  17. Field[] fields = apply.getFields();

  18. //获取所有属性

  19. List> allFieldList = getBomFields1(new ArrayList(), fields);

  20. for (List list : allFieldList) {

  21. System.out.println(list.toString());

  22. }

  23. }

  24.  
  25. protected static List> getBomFields(List chain, Field[] fields) {

  26. List> result = new ArrayList>();

  27. for (Field field : fields) {

  28. Class<?> fieldClass = field.getType();

  29. if (fieldClass.getName().startsWith("java")

  30. || fieldClass.getName().startsWith("javax")

  31. || fieldClass.getName().startsWith("com.sun")

  32. || fieldClass.getName().startsWith("boolean")

  33. || fieldClass.getName().startsWith("double")

  34. || fieldClass.getName().startsWith("int")) {

  35. List endChain = new ArrayList(chain);

  36. endChain.add(field);

  37. result.add(endChain);

  38. continue;

  39. } else {

  40. List thisChain = new ArrayList(chain);

  41. thisChain.add(field);

  42. result.addAll(getBomFields(new java.util.ArrayList(

  43. thisChain), fieldClass.getDeclaredFields()));

  44. }

  45. }

  46. return result;

  47. }

  48. public static List> getBomFields1(List chain,

  49. Field[] fields) {

  50. List> result = new ArrayList>();

  51. for (Field field : fields) {

  52. Class<?> fieldClass = field.getType();

  53. if (fieldClass.isPrimitive()

  54. || fieldClass.getName().startsWith("java.lang")

  55. || fieldClass.getName().startsWith("java.util.Date")

  56. || fieldClass.getName().startsWith("javax")

  57. || fieldClass.getName().startsWith("com.sun")

  58. || fieldClass.getName().startsWith("sun")

  59. || fieldClass.getName().startsWith("boolean")

  60. || fieldClass.getName().startsWith("double")

  61. || fieldClass.getName().startsWith("int")) {

  62. List endChain = new ArrayList(chain);

  63. endChain.add(field);

  64. result.add(endChain);

  65. continue;

  66. } else {

  67. if (fieldClass.isAssignableFrom(List.class)) // 【2】

  68. {

  69. Type fc = field.getGenericType(); // 关键的地方,如果是List类型,得到其Generic的类型

  70. if (fc instanceof ParameterizedType) // 【3】如果是泛型参数的类型

  71. {

  72. ParameterizedType pt = (ParameterizedType) fc;

  73. Class genericClazz = (Class) pt.getActualTypeArguments()[0]; // 【4】

  74. if ( genericClazz.getName().startsWith("java.lang") //设置list的终止类型

  75. || genericClazz.getName().startsWith("java.util.Date")

  76. || genericClazz.getName().startsWith("javax")

  77. || genericClazz.getName().startsWith("com.sun")

  78. || genericClazz.getName().startsWith("sun")

  79. || genericClazz.getName().startsWith("boolean")

  80. || genericClazz.getName().startsWith("double")

  81. || genericClazz.getName().startsWith("int")) {

  82. continue;

  83. }

  84. //System.out.println(genericClazz);

  85. // 得到泛型里的class类型对象。

  86. List thisChain = new ArrayList(chain);

  87. // System.out.println(chain);

  88. thisChain.add(field); //!!

  89. result.addAll(getBomFields1(new ArrayList(thisChain), genericClazz.getDeclaredFields()));

  90. }

  91. } else {

  92. List thisChain = new ArrayList(chain);

  93. thisChain.add(field);

  94. result.addAll(getBomFields1(new ArrayList(thisChain),

  95. fieldClass.getDeclaredFields()));

  96. }

  97.  
  98. }

  99. }

  100. return result;

  101. }

其中针对List类型的单独判断参考一下别人的代码片段如下 

  1.  Field[] fs = clazz.getDeclaredFields(); // 得到所有的fields  
  2.   
  3. for(Field f : fs)   
  4. {   
  5.     Class fieldClazz = f.getType(); // 得到field的class及类型全路径  
  6.   
  7.     if(fieldClazz.isPrimitive())  continue;  //【1】 //判断是否为基本类型  
  8.   
  9.     if(fieldClazz.getName().startsWith("java.lang")) continue; //getName()返回field的类型全路径;  
  10.   
  11.     if(fieldClazz.isAssignableFrom(List.class)) //【2】  
  12.     {   
  13.              Type fc = f.getGenericType(); // 关键的地方,如果是List类型,得到其Generic的类型  
  14.   
  15.              if(fc == null) continue;  
  16.   
  17.              if(fc instanceof ParameterizedType) // 【3】如果是泛型参数的类型   
  18.             {   
  19.                    ParameterizedType pt = (ParameterizedType) fc;  
  20.   
  21.                    Class genericClazz = (Class)pt.getActualTypeArguments()[0]; //【4】 得到泛型里的class类型对象。  
  22.   
  23.                    m.put(f.getName(), genericClazz);  
  24.   
  25.                    Map<String, Class> m1 = prepareMap(genericClazz);  
  26.   
  27.                    m.putAll(m1);   
  28.              }   
  29.       }   
  30. }  




【解释】: 
1、isPrimitive 

public boolean isPrimitive()判定指定的 Class 对象是否表示一个基本类型。 
有九种预定义的 Class 对象,表示八个基本类型和 void。这些类对象由 Java 虚拟机创建,与其表示的基本类型同名,即 boolean、byte、char、short、int、long、float 和 double。 【注:像Integer,Boolean等包装类不是基本类型!】 

这些对象仅能通过下列声明为 public static final 的变量访问,也是使此方法返回 true 的仅有的几个 Class 对象。  

返回: 当且仅当该类表示一个基本类型时,才返回 true 
从以下版本开始:JDK1.1 

 

 

参考http://lorry1113.iteye.com/blog/973903

http://www.360doc.com/content/11/1231/14/1954236_176297236.shtml

//-- %> <%if ((e_lotinfo.getString("USEQTY").equals("0"))&&( !e_lotinfo.getString("STATUS").equals("S"))) { %> <tr bgcolor=beige> <%}else if ( e_lotinfo.getString("NOT_MATCH").equals("Y")) {%> <tr bgcolor="#E893AF"> <%}else if ( e_lotinfo.getString("STATUS").equals("R")) {%> <tr bgcolor="#eeeeff"> <%}else if ( e_lotinfo.getString("STATUS").equals("S")) {%> <tr bgcolor="#ffeeee"> <%}else if ( e_lotinfo.getString("STATUS").equals("")) { %> <tr> <%}else if ( e_lotinfo.getString("STATUS").equals("B")) {%> <tr bgcolor="orange"> <%//}else if (over_flag == 8) { // out.println("DDDD"); %> <%}%> <td align=center> <!--Add by summer gao in 20040616 for new ship function--> <%if (e_lotinfo.getString("SHIPID").equals("")) { %> <input type="checkbox" name="slotid" onclick=sumvalue(this) value="<%=pshipid%>"> <%}else{ %> <input type="checkbox" name="slotid" onclick=sumvalue(this) value="<%=pshipid+"+"+e_lotinfo.getString("RECEIVEPERSON")%>"> <%}%> <input type="checkbox" name="lotproduct" value="<%=e_lotinfo.getString("PRODUCTID")+"+"+e_lotinfo.getString("PLANT")+"+"+e_lotinfo.getString("SMICLOTID")%>" style="display:none;"> <input type="hidden" name="slotid1" value="<%=e_lotinfo.getString("USEQTY")%>"> <input type="hidden" name="slotid2" value="<%=pg_die_c%>"> </td> <%if (e_lotinfo.getString("STATUS").equals("B")) { %> <td>Error</td> <%}else if ((e_lotinfo.getString("USEQTY").equals("0"))&&(!e_lotinfo.getString("STATUS").equals("S"))) {%> <td>X</td> <%}else if (e_lotinfo.getString("STATUS").equals("")) {%> <td> </td> <%}else{%> <td><%=e_lotinfo.getString("STATUS")%></td> <%}%> <%if (e_lotinfo.getString("MARK").equals("")) { %> <td> </td> <%}else{%> <td><%=e_lotinfo.getString("MARK")%></td> <%}%> <td><%=e_lotinfo.getString("PRODUCTID")%></td> <input type="hidden" name=<%="ProdID"+n%> value="<%=e_lotinfo.getString("PRODUCTID")%>"> <td><%=e_lotinfo.getString("SMICLOTID")%></td> <input type="hidden" name=<%="LotID"+n%> value="<%=e_lotinfo.getString("SMICLOTID")%>"> <%if (e_lotinfo.getString("CUSTOMERLOTID").equals("")) { %> <td> </td> <%}else{%> <td><%=e_lotinfo.getString("CUSTOMERLOTID")%></td> <%}%> <%//Fly Long add Lot Type 20050905 if (e_lotinfo.getString("LOTTYPE").equals("")) { %> <td> </td> <%}else{%> <td><%=e_lotinfo.getString("LOTTYPE")%></td> <%}%> <td nowrap width=135> <%if (e_lotinfo.getString("INVDUEDATE").equals("")) { %> <input type="text" size="9" name=<%="invduedate"+n%> value="" onFocus="this.blur();openWindow('querylotid.invduedate'+<%=n%>,'s');"> <input type="button" name=<%="cleardate"+n%> onclick=clear_date(<%=n%>) value="Reset" size="3"> <%}else{%> <input type="text" size="9" name=<%="invduedate"+n%> value=<%=e_lotinfo.getString("INVDUEDATE")%> onFocus="this.blur();openWindow('querylotid.invduedate'+<%=n%>,'s');"> <input type="button" name=<%="cleardate"+n%> onclick=clear_date(<%=n%>) value="Reset" size="3"> <%}%> </td> <td width=130> <% PreparedStatement psLotid = null; ResultSet rsLotid = null; lotid = ""; lotid1 = ""; lotid = e_lotinfo.getString("SMICLOTID"); psLotid = con_ace.prepareStatement("select unique lot_id from top_oqa_excursion_config where lot_id= '"+lotid+"'"); rsLotid = psLotid.executeQuery(); while(rsLotid.next()){ lotid1 = rsLotid.getString("lot_id"); } psLotid.close(); %> <%if (!lotid1.equals("")) {%> <select name=<%="reason"+n%> style="font-size:9pt"> <option value="">Excursion Lot</option> <option value="CUSTOMER PULL IN">Customer pull in</option> <option value="CUSTOMER PUSH OUT">Customer push out</option> <option value="ENG ISSUE">Eng Issue</option> <option value="BACKUP WAFER">Backup wafer</option> <option value="PULL AHEAD PO">Pull ahead PO</option> <option value="YIELD IMPROVEMENT">Yield improvement</option> <option value="CUSTOMER RETURN">Customer return</option> <option value="WAIT SCRAP">Wait scrap</option> <option value="OTHER">Other</option> </select> <%}else if (e_lotinfo.getString("REASON").equals("")) {%> <select name=<%="reason"+n%> style="font-size:9pt"> <option value=""> </option> <option value="CUSTOMER PULL IN">Customer pull in</option> <option value="CUSTOMER PUSH OUT">Customer push out</option> <option value="ENG ISSUE">Eng Issue</option> <!-Angela 20061113--> <!--<option value="NO PO">No PO</option>--> <option value="BACKUP WAFER">Backup wafer</option> <option value="PULL AHEAD PO">Pull ahead PO</option> <option value="YIELD IMPROVEMENT">Yield improvement</option> <option value="CUSTOMER RETURN">Customer return</option> <option value="WAIT SCRAP">Wait scrap</option> <option value="OTHER">Other</option> </select> <%}else if (e_lotinfo.getString("REASON").equals("CUSTOMER PULL IN")) {%> <select name=<%="reason"+n%> style="font-size:9pt"> <option value="CUSTOMER PULL IN">Customer pull in</option> <option value="CUSTOMER PUSH OUT">Customer push out</option> <option value="ENG ISSUE">Eng Issue</option> <!-Angela 20061113--> <!--<option value="NO PO">No PO</option>--> <option value="BACKUP WAFER">Backup wafer</option> <option value="PULL AHEAD PO">Pull ahead PO</option> <option value="YIELD IMPROVEMENT">Yield improvement</option> <option value="CUSTOMER RETURN">Customer return</option> <option value="WAIT SCRAP">Wait scrap</option> <option value="OTHER">Other</option> <option value=""> </option> </select> <%}else if (e_lotinfo.getString("REASON").equals("CUSTOMER PUSH OUT")) {%> <select name=<%="reason"+n%> style="font-size:9pt"> <option value="CUSTOMER PUSH OUT">Customer push out</option> <option value="CUSTOMER PULL IN">Customer pull in</option> <option value="ENG ISSUE">Eng Issue</option> <!-Angela 20061113--> <!--<option value="NO PO">No PO</option>--> <option value="BACKUP WAFER">Backup wafer</option> <option value="PULL AHEAD PO">Pull ahead PO</option> <option value="YIELD IMPROVEMENT">Yield improvement</option> <option value="CUSTOMER RETURN">Customer return</option> <option value="WAIT SCRAP">Wait scrap</option> <option value="OTHER">Other</option> <option value=""> </option> </select> <%}else if (e_lotinfo.getString("REASON").equals("ENG ISSUE")) {%> <select name=<%="reason"+n%> style="font-size:9pt"> <option value="ENG ISSUE">Eng Issue</option> <option value="CUSTOMER PULL IN">Customer pull in</option> <option value="CUSTOMER PUSH OUT">Customer push out</option> <!-Angela 20061113--> <!--<option value="NO PO">No PO</option>--> <option value="BACKUP WAFER">Backup wafer</option> <option value="PULL AHEAD PO">Pull ahead PO</option> <option value="YIELD IMPROVEMENT">Yield improvement</option> <option value="CUSTOMER RETURN">Customer return</option> <option value="WAIT SCRAP">Wait scrap</option> <option value="OTHER">Other</option> <option value=""> </option> </select> <%}else if (e_lotinfo.getString("REASON").equals("OTHER")) {%> <select name=<%="reason"+n%> style="font-size:9pt"> <option value="OTHER">Other</option> <option value="CUSTOMER PULL IN">Customer pull in</option> <option value="CUSTOMER PUSH OUT">Customer push out</option> <option value="ENG ISSUE">Eng Issue</option> <!-Angela 20061113--> <!--<option value="NO PO">No PO</option>--> <option value="BACKUP WAFER">Backup wafer</option> <option value="PULL AHEAD PO">Pull ahead PO</option> <option value="YIELD IMPROVEMENT">Yield improvement</option> <option value="CUSTOMER RETURN">Customer return</option> <option value="WAIT SCRAP">Wait scrap</option> <option value=""> </option> </select> <%}else if (e_lotinfo.getString("REASON").equals("NO PO") || e_lotinfo.getString("REASON").equals("BACKUP WAFER")) {%> <select name=<%="reason"+n%> style="font-size:9pt"> <!-Angela 20061113--> <!--<option value="NO PO">No PO</option>--> <option value="BACKUP WAFER">Backup wafer</option> <option value="PULL AHEAD PO">Pull ahead PO</option> <option value="YIELD IMPROVEMENT">Yield improvement</option> <option value="CUSTOMER PULL IN">Customer pull in</option> <option value="CUSTOMER PUSH OUT">Customer push out</option> <option value="ENG ISSUE">Eng Issue</option> <option value="CUSTOMER RETURN">Customer return</option> <option value="WAIT SCRAP">Wait scrap</option> <option value="OTHER">Other</option> <option value=""> </option> </select> <%}else if (e_lotinfo.getString("REASON").equals("CUSTOMER RETURN")) {%> <select name=<%="reason"+n%> style="font-size:9pt"> <option value="CUSTOMER RETURN">Customer return</option> <option value="CUSTOMER PULL IN">Customer pull in</option> <option value="CUSTOMER PUSH OUT">Customer push out</option> <option value="ENG ISSUE">Eng Issue</option> <!-Angela 20061113--> <!--<option value="NO PO">No PO</option>--> <option value="BACKUP WAFER">Backup wafer</option> <option value="PULL AHEAD PO">Pull ahead PO</option> <option value="YIELD IMPROVEMENT">Yield improvement</option> <option value="WAIT SCRAP">Wait scrap</option> <option value="OTHER">Other</option> <option value=""> </option> </select> <%}else if (e_lotinfo.getString("REASON").equals("WAIT SCRAP")) {%> <select name=<%="reason"+n%> style="font-size:9pt"> <option value="WAIT SCRAP">Wait scrap</option> <option value="CUSTOMER PULL IN">Customer pull in</option> <option value="CUSTOMER PUSH OUT">Customer push out</option> <option value="ENG ISSUE">Eng Issue</option> <!-Angela 20061113--> <!--<option value="NO PO">No PO</option>--> <option value="BACKUP WAFER">Backup wafer</option> <option value="PULL AHEAD PO">Pull ahead PO</option> <option value="YIELD IMPROVEMENT">Yield improvement</option> <option value="CUSTOMER RETURN">Customer return</option> <option value="OTHER">Other</option> <option value=""> </option> </select> <%}else if (e_lotinfo.getString("REASON").equals("PULL AHEAD PO")) {%> <select name=<%="reason"+n%> style="font-size:9pt"> <option value="PULL AHEAD PO">Pull ahead PO</option> <option value="WAIT SCRAP">Wait scrap</option> <option value="CUSTOMER PULL IN">Customer pull in</option> <option value="CUSTOMER PUSH OUT">Customer push out</option> <option value="ENG ISSUE">Eng Issue</option> <!-Angela 20061113--> <!--<option value="NO PO">No PO</option>--> <option value="BACKUP WAFER">Backup wafer</option> <option value="YIELD IMPROVEMENT">Yield improvement</option> <option value="CUSTOMER RETURN">Customer return</option> <option value="OTHER">Other</option> <option value=""> </option> </select> <%}else if (e_lotinfo.getString("REASON").equals("YIELD IMPROVEMENT")) {%> <select name=<%="reason"+n%> style="font-size:9pt"> <option value="YIELD IMPROVEMENT">Yield improvement</option> <option value="WAIT SCRAP">Wait scrap</option> <option value="CUSTOMER PULL IN">Customer pull in</option> <option value="CUSTOMER PUSH OUT">Customer push out</option> <option value="ENG ISSUE">Eng Issue</option> <!-Angela 20061113--> <!--<option value="NO PO">No PO</option>--> <option value="BACKUP WAFER">Backup wafer</option> <option value="PULL AHEAD PO">Pull ahead PO</option> <option value="CUSTOMER RETURN">Customer return</option> <option value="OTHER">Other</option> <option value=""> </option> </select> <%}%> </td> <td width=100><input type="text" size="30" name=<%="reason_remark"+n%> value="<%=e_lotinfo.getString("REASON_REMARK")%>"> <%if (e_lotinfo.getString("FIRSTRECEIVEDATE").equals("")) { %> <td> </td> <%}else{%> <td><%=e_lotinfo.getString("FIRSTRECEIVEDATE")%></td> <%}%> <%//--add by lily tian for BJ FG WH if (e_lotinfo.getString("RECEIVEDATE").equals("")) { %> <td> </td> <%}else{ //--add by summer gao if (days > 180) { %> <td><font color="#FF0000"><b><%=e_lotinfo.getString("RECEIVEDATE")%></b></font></td> <%}else{%> <td><%=e_lotinfo.getString("RECEIVEDATE")%></td> <%} } %> <td><%=e_lotinfo.getString("TOTALSTOCKQTY")%></td> <%if (e_lotinfo.getString("DESTINATION").equals("")) { %> <td> </td> <%}else{%> <td><%=e_lotinfo.getString("DESTINATION")%></td> <%}%> <td><%=e_lotinfo.getString("MEINS")%></td> <td><%=e_lotinfo.getString("SHIPPROCESS")%></td> <%if (e_lotinfo.getString("YIELD").equals("")) { %> <td> </td> <%}else{%> <td> <% //=e_lotinfo.getString("YIELD") pyield = Float.parseFloat(e_lotinfo.getString("YIELD")); showyield = (new Float(pyield*100)).intValue(); out.print (showyield); %> </td> <%}%> <td> <%if (e_lotinfo.getString("PRODUCTID").indexOf("-") == -1) {%> <a href="update_gdc.jsp?productid=<%=e_lotinfo.getString("PRODUCTID")%>&plant=<%=e_lotinfo.getString("PLANT")%>&slotid=<%=e_lotinfo.getString("SMICLOTID")%>"> <%=pg_die_c%> </a> <%}else{%> <%=pg_die_c%> <%}%> </td> <td><%=e_lotinfo.getString("USEQTY")%></td> <td><%=pshipid%></td> <%if (e_lotinfo.getString("WAFERID").equals("")) { %> <td> </td> <%}else{%> <td> <%if (e_lotinfo.getString("PRODUCTID").indexOf("-") == -1) {%> <a href="javascript:openwin('wafer_detail.jsp?productid=<%=e_lotinfo.getString("PRODUCTID")%>&plant=<%=e_lotinfo.getString("PLANT")%>&slotid=<%=e_lotinfo.getString("SMICLOTID")%>','','250','800')"> <%=e_lotinfo.getString("WAFERID")%> </a> <%}else{%> <%=e_lotinfo.getString("WAFERID")%> <%}%> </td> <%}%> <%if (e_lotinfo.getString("ZGRADE").equals("")) { %> <td> </td> <%}else{%> <td><%=e_lotinfo.getString("ZGRADE")%></td> <%}%> <%if (e_lotinfo.getString("STARTDATE").equals("")) { %> <td> </td> <%}else{%> <td><%=e_lotinfo.getString("STARTDATE")%></td> <%}%> <%if (e_lotinfo.getString("SMICCUSTID").equals("")) { %> <td> </td> <%}else{%> <td><%=e_lotinfo.getString("SMICCUSTID")%></td> <%}%> <%if (e_lotinfo.getString("SMICCUSTLOTID").equals("")) { %> <td> </td> <%}else{%> <td align=center><%=e_lotinfo.getString("SMICCUSTLOTID")%></td> <%}%> <%if (e_lotinfo.getString("SMICTERMCODE").equals("")) { %> <td> </td> <%}else{%> <td><%=e_lotinfo.getString("SMICTERMCODE")%></td> <%}%> <%if (e_lotinfo.getString("OWNERSHIP").equals("")) { %> <td> </td> <%}else{%> <td><%=e_lotinfo.getString("OWNERSHIP")%></td> <%}%> <td><%=e_lotinfo.getString("PLANT")%></td> <td><%=e_lotinfo.getString("SLOC")%></td> <%if (e_lotinfo.getString("RESERVENO").equals("")) { %> <td> </td> <%}else{%> <td><%=e_lotinfo.getString("RESERVENO")%></td> <%}%> <%//--add by summer gao for ship function if (e_lotinfo.getString("RECEIVEPERSON").equals("")) { %> <td> </td> <%}else{%> <td><%=e_lotinfo.getString("RECEIVEPERSON")%></td> <%}%> <%if (e_lotinfo.getString("CUSTOMERCRITERIA").equals("")) { %> <td> </td> <%}else{%> <td align=center><%=e_lotinfo.getString("CUSTOMERCRITERIA")%></td> <%}%> </tr> <% } } while(e_lotinfo.nextRow()); %> </table> <%if (!("VIEW_SH01".equals(session.getAttribute("role"))||"VIEW_BJ01".equals(session.getAttribute("role"))||"VIEW_TJ01".equals(session.getAttribute("role")) ||"VIEW_WH01".equals(session.getAttribute("role")) || "SA_SH01".equals(session.getAttribute("role"))||"SA_BJ01".equals(session.getAttribute("role"))||"SA_TJ01".equals(session.getAttribute("role"))||"SA_WH01".equals(session.getAttribute("role")))) {%> <tr> <td colspan="2" align="left">                      <input type="submit" name="Submit" value="Submit" style="font-family:verdana;background:#B9BECB">            <input type="reset" name="Submit2" value="Reset" style="font-family:verdana;background:#B9BECB"> <input type="hidden" name="rown" value="<%=n%>"> </td> </tr> <%}%> </form> <% } else { out.println("<img src=pic/wrong.gif> <b> Sorry, system have no fixed Lots data.</b>"); }%> <%} catch (Exception ex) { System.out.println("Caught an exception: \n" + ex); } finally { if (con_ace != null) { con_ace.close(); } JCO.releaseClient(client); JCO.removeClientPool(SID); } System.out.println("row n=" + n); %> </td></tr> 前端 和 后端分离开 dto 逻辑 另一份DTO
08-29
public BaseResponse<PagingResponse<GetNationCompetitionResponseDto>> queryNationalCompetitionList(final GetNationCompetitionRequestDto requestDto) { PagingResponse<GetNationCompetitionResponseDto> pagingResponse = new PagingResponse<>(); NationalCompetitionQueryBo queryBo = new NationalCompetitionQueryBo(requestDto); // 查询PK赛全国赛信息和总数 int totalCount = competitionService.getNationalCompetitionCount(queryBo); List<CompetitionPo> baseInfos = competitionService.getNationalCompetitionList(queryBo); if (totalCount == 0) { pagingResponse.setTotalCount(totalCount); pagingResponse.setList(Collections.emptyList()); pagingResponse.setPageNum(requestDto.getPageNum()); pagingResponse.setPageSize(requestDto.getPageSize()); return BaseResponse.success(pagingResponse); } // 活动主题ids List<Long> arenaIds = baseInfos.stream().map(CompetitionPo::getArenaEventsId).distinct().collect(Collectors.toList()); // 比赛ids List<Long> competitionIds = baseInfos.stream().map(CompetitionPo::getId).collect(Collectors.toList()); // 根据活动id获取活动对象 List<ArenaEventsPo> arenaEventList = arenaEventsService.getArenaEventListByIds(arenaIds); List<ArenaEvents> arenaEventsDtoList = arenaEventList.stream().map(po -> { ArenaEvents arenaEvents = new ArenaEvents(); BeanUtils.copyProperties(po, arenaEvents); return arenaEvents; }) .collect(Collectors.toList()); // 根据比赛id查询参赛人员信息,比赛id为key,参赛人员信息为value List<CompetitionContestantPo> contestantPos = competitionContestantService.getContestantsByCompetitionIds(competitionIds); Map<Long, List<CompetitionContestantPo>> contestantMap = contestantPos.stream().collect(Collectors.groupingBy(CompetitionContestantPo::getCompetitionId)); // 获取参赛人员的userId,并根据userId查询用户头像 List<String> userIds = contestantPos.stream().map(CompetitionContestantPo::getUserId).distinct().collect(Collectors.toList()); List<UserInfoPo> userInfos = userService.getUsersByDsIds(userIds); Map<String, CompetitionUserInfo> userInfoMap = userInfos.stream() .collect(Collectors.toMap(UserInfoPo::getDsId, po -> { CompetitionUserInfo userInfo = new CompetitionUserInfo(); BeanUtils.copyProperties(po, userInfo); userInfo.setUserId(po.getDsId()); userInfo.setUserName(po.getName()); userInfo.setAvatar(po.getHeadImgUrl()); return userInfo; } )); final GetNationCompetitionResponseDto responseDto = new GetNationCompetitionResponseDto(); // 如果是全国单人赛则展示单人赛数据 if (!baseInfos.isEmpty() && CompetitionMode.NATIONAL_SINGLE.equals(baseInfos.get(0).getMode())) { List<CompetitionList> nationalSingleDtoList = baseInfos.stream().map(po -> { CompetitionList singleDtoList = new CompetitionList(); BeanUtils.copyProperties(po, singleDtoList); singleDtoList.setCompetitionId(po.getId()); singleDtoList.setEventId(po.getArenaEventsId()); List<AccessEnum> accessEnumsList = Arrays.stream(po.getAccess().split(",")) .map(AccessEnum::valueOf) .collect(Collectors.toList()); singleDtoList.setAccess(accessEnumsList); singleDtoList.setMeasureName(CompetitionMeasure.valueOf(po.getMeasureName())); // 获取本场比赛的参赛人员 List<CompetitionContestantPo> contestants = contestantMap.get(po.getId()); // 查找Blue方参赛人员 CompetitionContestantPo blueContestant = contestants.stream() .filter(c -> ContestantIdentity.BLUE.getValue().equals(c.getContestantIdentity())) .findFirst() .orElse(null); CompetitionUserInfo blueUser = userInfoMap.get(blueContestant.getUserId()); blueUser.setScore(calculateScore(po.getCompetitionResult(), blueContestant.getContestantIdentity())); // 查找red方参赛人员,并计算分数 CompetitionContestantPo redContestant = contestants.stream() .filter(c -> ContestantIdentity.RED.getValue().equals(c.getContestantIdentity())) .findFirst() .orElse(null); CompetitionUserInfo redUser = userInfoMap.get(redContestant.getUserId()); redUser.setScore(calculateScore(po.getCompetitionResult(), redContestant.getContestantIdentity())); singleDtoList.setBlueUserInfo(userInfoMap.get(blueContestant.getUserId())); singleDtoList.setRedUserInfo(userInfoMap.get(redContestant.getUserId())); return singleDtoList; }) .collect(Collectors.toList()); responseDto.setList(nationalSingleDtoList); } else { // 如果为战队,则返回战队信息,根据比赛id查询战队信息 Map<Long, CompetitionTeamExtPo> teamExtPoMap = competitionTeamExtService.getMapByCompetitionIds(competitionIds); List<CompetitionList> nationalTeamDtoList = baseInfos.stream().map(po -> { // 比赛信息 CompetitionList teamDtoList = new CompetitionList(); BeanUtils.copyProperties(po, teamDtoList); teamDtoList.setCompetitionId(po.getId()); teamDtoList.setEventId(po.getArenaEventsId()); List<AccessEnum> accessEnumsList = Arrays.stream(po.getAccess().split(",")) .map(AccessEnum::valueOf) .collect(Collectors.toList()); teamDtoList.setAccess(accessEnumsList); teamDtoList.setMeasureName(CompetitionMeasure.valueOf(po.getMeasureName())); // 团队赛蓝方大队信息 CompetitionTeamInfo blueTeam = new CompetitionTeamInfo(); blueTeam.setTeamNum(teamExtPoMap.get(po.getId()).getTeamNum()); blueTeam.setTeamName(teamExtPoMap.get(po.getId()).getBlueTeamName()); blueTeam.setTotalMembers(CompetitionConstants.countTeamMembers(teamExtPoMap.get(po.getId()).getBlueTeams())); // 蓝方小队集合 List<com.cmbchina.ccc.msp.nebulaservice.model.bo.competition.TeamInfo> blueTeams = JsonUtils.stringToTypeOfT(teamExtPoMap.get(po.getId()).getBlueTeams(), TypeUtil.getListType(TeamInfo.class)); List<com.cmbchina.ccc.msp.nebulaservice.model.bo.competition.TeamInfo> blueTeamList = buildTeamInfos(contestantPos, blueTeams); blueTeam.setTeamInfos(blueTeamList); // 团队赛红方大队信息 CompetitionTeamInfo redTeam = new CompetitionTeamInfo(); redTeam.setTeamNum(teamExtPoMap.get(po.getId()).getTeamNum()); redTeam.setTeamName(teamExtPoMap.get(po.getId()).getRedTeamName()); List<com.cmbchina.ccc.msp.nebulaservice.model.bo.competition.TeamInfo> redTeams = JsonUtils .stringToTypeOfT(teamExtPoMap.get(po.getId()).getRedTeams(), TypeUtil.getListType(TeamInfo.class)); // 红方小队信息 List<com.cmbchina.ccc.msp.nebulaservice.model.bo.competition.TeamInfo> redTeamList = buildTeamInfos(contestantPos, redTeams); redTeam.setTeamInfos(redTeamList); return teamDtoList; }).collect(Collectors.toList()); responseDto.setList(nationalTeamDtoList); } responseDto.setArenaEventsList(arenaEventsDtoList); responseDto.setPageSize(arenaEventsDtoList.size()); responseDto.setTotalCount(totalCount); return BaseResponse.success(pagingResponse); }我这段代码逻辑实现了哪些内容
10-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值