estou a dias tentando compara dois objeto e remove o que tem mais…
List<Credito> lista5 = new ArrayList<Credito>();
List<Credito> lista6 = new ArrayList<Credito>();
List<Credito> lista7 = new ArrayList<Credito>();
Credito a = null;
int i = 0;
while(i <= 3){
a = new Credito();
a.setIdCredito(1);
a.setIdCredito(2);
a.setIdCredito(3);
lista5.add(a);
++i;
}
Credito e = null;
i = 0;
while(i <= 3){
e = new Credito();
e.setIdCredito(1);
e.setIdCredito(5);
e.setIdCredito(6);
e.setIdCredito(2);
lista6.add(e);
++i;
}
lista7.addAll(lista6);
lista7.remove(lista5);
for (int g = 0; g < lista7.size(); ++g){
%>
<p /><%=lista7.get(0).getIdCredito() %> <br>
<% }
Estou tentando entender teu programinha aqui. Explique melhor, o que ele deveria fazer? Quais objetos tu quer comparar e o que tu quer remover de qual?
Vou começar… tu tem três List, lista5, lista6 e lista7.
Depois tu cria o Credito a e durante 3 vezes tu chama repetidas vezes o método setIdCredito(int). Mas tu só tem uma referência, tu fez isso de propósito?. Apesar de tu adicionar 3 vezes o a na Lista, ele sempre vai estar apontando para o mesmo objeto.
Depois tu faz a mesma coisa para o Credito e, só que adiciona na lista 6 ao invés da lista 5…
Depois ficou mais confuso ainda… Dá uma clareada aí no que tu queria fazer… Ou então eu que não consegui entender direito.
é o seguinte este código só é um teste pois na real também não consigo. o código retorna duas consulta sql uma tem os ids pago e outro tem os ids não foi pago. a ideia e mostra só o que não foi pago entendi.
o código e este:
//Lista de Credito a recebe.....
Collection <Credito> creditoRecebe = instancia.getconsultaCredito();
Collection <Credito> credpago = instancia.consultaCreditoRecebido();
Iterator<Credito> listaCredito = creditoRecebe.iterator();
Iterator<Credito> listaPago = credpago.iterator();
List <Credito> cr = new ArrayList<Credito>();
List <Credito> pg = new ArrayList<Credito>();
List <Credito> resul = new ArrayList<Credito>();
for(int e = 0; e < creditoRecebe.size(); ++e){
listaCredito.hasNext();
cr.add(listaCredito.next());
%>
<%=cr.get(e).getIdCredito() %><br>
<%
}
%><br><br><%
for(int e = 0; e < credpago.size(); ++e){
listaPago.hasNext();
pg.add(listaPago.next());
%>
<%=pg.get(e).getIdCredito() %><br>
<%
}
resul.addAll(cr);
resul.remove(pg);
%><br><br><%
for(int e = 0; e < resul.size(); ++e){
%>
<%=resul.get(e).getIdCredito() %><br>
<%
}
%>
Cara, ta meio difícil de entender o que vc quer fazer. Mas vamos ver se endendi, vc tem uma quantidade de créditos a receber e alguns já foram pagos, assim vc quer que saber quais nao foram pagos ainda. É isso?
Acho que isso deveria ser feito diretamente no banco de dados, tipo com uma consulta SQL. Assim ficaria mais eficiente e organizado.
Dicas:
Uma coisa que notei foi o uso excessivo de scriptlet, isso “suja” muito o codigo, tenta usar um padrão, por exemplo MVC.
Outra coisa é o uso de Iterator, ao invéz de vc usar isso vc pode fazer algo como o codigo abaixo para andar na lista:
Crie uma procedure SQL e uma view, depois busque esta na Camada DAO do programa.
Agora se o que tu queres é resolver o problema da comparação, posta o erro da jvm aqui, para vermos.
[color=blue] mestrekame e isto que você entendeu :[/color] [color=olive] tem uma quantidade de créditos a receber e alguns já foram pagos, assim vc quer que saber quais nao foram pagos ainda. É isso? [/color]
e você [color=green]fantomas [/color] não implementei os método [color=red]equals e hashcode. [/color]
como faço??? o meus métodos que retorna a consulta do banco e este:
[code]
public Collection getconsultaCredito() throws CreditoException {
// TODO Auto-generated method stub
ArrayList ar = null;
Conectar objconect= new Conectar();
Credito c = null;
StringBuffer sql = new StringBuffer();
ResultSet rs = null;
try {
objconect.getConnection();
sql.append("SELECT idCredito FROM credito");
rs = objconect.executeQuery(sql.toString());
ar = new ArrayList<Credito>();
while(rs.next()){
c = new Credito();
c.setIdCredito(rs.getInt(1));
ar.add(c);
}
}catch (Exception ee) {
// TODO: handle exception
}
return ar;
}[/code]
public Collection<Credito> consultaCreditoRecebido()
throws RecebeCreditoException {
// TODO Auto-generated method stub
ArrayList<Credito> ar = null;
Conectar Objconect= new Conectar();
ResultSet rs = null;
Credito C = null;
StringBuffer sql = new StringBuffer();
//Pega dia e mes do sistema....
@SuppressWarnings("unused")
Date suaData = new Date(System.currentTimeMillis());
GregorianCalendar calendarioGregoriano = new GregorianCalendar();
String ano = String.valueOf(calendarioGregoriano.get(GregorianCalendar.YEAR));
String mes = String.valueOf(calendarioGregoriano.get(GregorianCalendar.MONTH));
//Para pega o mês atual soma + 1, pois o ano neste metodo comerça com 0 "0 à 11 mês ".
Integer mes1 = Integer.parseInt(mes);
mes1 +=1;
try {
Objconect.getConnection();
//Esta SQL: selecionava na coluna mesAno o mês e ano do sistema. Ex.: 03/2009.
sql.append("SELECT DISTINCT t1.idCredito FROM credito t1, creditorecebidomes t2" +
" where t2.mesAno = '"+mes1+"-"+ano+"' " +
" and t1.idCredito = t2.idCreditoRecebido");
rs = Objconect.executeQuery(sql.toString());
ar = new ArrayList<Credito>();
while(rs.next()){
C = new Credito();
C.setIdCredito(rs.getInt(1));
ar.add(C);
}
} catch (Exception e) {
// TODO: handle exception
}finally{
Objconect = null;
ano = null;
C = null;
calendarioGregoriano = null;
mes = null;
mes1 = null;
sql = null;
suaData = null;
rs = null;
}
return ar;
}