【发布时间】:2014-10-11 03:36:26
【问题描述】:
我有一个问题,我正在尝试比较两个arraylist,以便我可以将另一个完整的信息作为一个,问题如上所述:
我有这个问题:
public ArrayList consultaEntidadPresencial (GlpiEntities gentities){
ArrayList consulta = new ArrayList();
try {
cnn=Conectar.getInstace();
ps=cnn.prepareStatement("SELECT\n" + "glpi_entities.name,\n" + "Sum(glpi_tickettasks.actiontime)/3600 AS Tiempo\n" + "FROM\n" + "glpi_tickettasks\n" + "INNER JOIN glpi_tickets ON glpi_tickets.id = glpi_tickettasks.tickets_id\n" + "INNER JOIN glpi_entities ON glpi_tickets.entities_id = glpi_entities.id\n" + "WHERE\n" + "glpi_tickettasks.date BETWEEN ? AND ? AND\n" + "glpi_tickettasks.taskcategories_id = 4\n" +"GROUP BY\n" + "glpi_entities.name");
ps.setDate(1,gentities.getfInicial());
ps.setDate(2, gentities.getfFinal());
rs=ps.executeQuery();
while(rs.next()){
GlpiEntities gtickets=new GlpiEntities();
gtickets.setName(rs.getString(1));
gtickets.setTiempoPresencial(rs.getDouble(2));
consulta.add(gtickets);
}
} catch (NamingException ex) {
Logger.getLogger(TasksDao.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(TasksDao.class.getName()).log(Level.SEVERE, null, ex);
}
return consulta;
}
我有另一个查询,它只是更改 glpi_tickettasks.taskcategories_id = 3(只是数字),这是因为在我们公司,我们将服务指定为远程或 presencial(我尝试从查询中获取信息,但我不是无法得到我想要的)
在执行两个查询后,我得到两个带有对象的 Arraylist,其中一个具有以下数据: 名称:(实体名称) 远程时间:1.5
和其他: 名称(实体名称) 呈现时间:5.5
因为我想在网页上显示该信息,所以我制作了一个具有以下代码的控制器:
if(request.getParameter("entidad")!=null && request.getParameter("entidad").equals("Enviar")){
String fInicial=request.getParameter("inicial");
String fFinal= request.getParameter("final");
if(fInicial.length()<19 || fFinal.length()<19){
response.sendRedirect("reportes/Reportegeneral.jsp?msg=Las fechas deben ser ingresadas con el formato Año-Mes-Día horas-minutos-segundos.");
}else{
GlpiEntities entities=new GlpiEntities();
try {
Date inicial=formatter.parse(fInicial);
Date fechaF=formatter.parse(fFinal);
fi=new java.sql.Date(inicial.getTime());
ff=new java.sql.Date(fechaF.getTime());
int arraySize=0;
entities.setfInicial(fi);
entities.setfFinal(ff);
ArrayList<GlpiEntities> presencial=tdao.consultaEntidadPresencial(entities);
ArrayList<GlpiEntities> remoto=tdao.consultaEntidadRemoto(entities);
List<GlpiEntities> resultado= new ArrayList<GlpiEntities>();
if(presencial.size()>remoto.size()){
arraySize=presencial.size();
}else if (remoto.size()>presencial.size()) {
arraySize=remoto.size();
}
for (GlpiEntities presential: presencial){
for(GlpiEntities remote: remoto){
if(!presential.getName().equals(remote.getName())){
//out.print(" <br/> el valor de primer if es: "+presential.getName());
resultado.add(presential);
}else if(presential.getName().equals(remote.getName())){
presential.setTiempoRemoto(remote.getTiempoRemoto());
//out.print(" <br/> el valor de primer if es: "+presential.getName()+" Valor de remoto"+remote.getName());
resultado.add(presential);
}
}
for(GlpiEntities listado: resultado){
out.print(" <br/> Nombre entidad: "+listado.getName());
out.print(" <br/> Tiempo Presencial: "+listado.getTiempoPresencial());
out.print(" <br/> Tiempo Remoto: "+listado.getTiempoRemoto());
}
}
sesion.setAttribute("entidaddetalle", resultado);
response.sendRedirect("reportes/Reportegeneral.jsp?resul=ok");
} catch (ParseException ex) {
Logger.getLogger(ReporteCtrol.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
如您所见,我有一个 If 用于评估哪个数组具有最大值我的意思是哪个数组更大,这是因为我认为最好的方法是使用普通 for 来读取数组,但随后谷歌搜索我找到了THIS LINK,然后我尝试使用 for:each 来解决问题,但是当我执行一些证明时,我意识到该对象已进入新数组数百次所以什么我想实现的是我想比较两个数组,如果远程数组上不存在远程实体,则应将其添加到新的数组列表中,但如果远程对象上的实体确实存在,那么我想将远程时间添加到该对象,然后将其添加到新的数组列表中,但它不起作用,因此非常欢迎提出建议。
PD:哦差点忘了,你看到的 Br 是用来调试的,只是为了知道正在处理什么。
【问题讨论】: