Boa noite galera!!!
Estou com um problema que é o seguinte:
[list] insiro três despesas no ArrayList despesasFixas[];[/list]
[list]insiro dois pagamentos de despesas no ArrayList pagamento[];[/list]
[list]comparando os dois ArrayList, quero inserir em um terceiro ArrayList contasPagar[], somente as despesas que faltaram serem pagas, e não consigo.[/list]
Quando insiro somente um pagamento da certo, qdo mais de um pagamento não da certo.
Desde já agradeço pela atenção, de quem puder me ajudar.
[code]String nomeDespPaga = null;
String nomeDesp = null;
for(int i=0; i<despFixas.size();i++){
nomeDesp=despFixas.get(i).getNomeDespesa();
for(int a=0; a<PagamentoDespesas_CRUD.pagamento.size();a++){
nomeDespPaga= PagamentoDespesas_CRUD.pagamento.get(a).getNomeDespesaPaga();
if(!nomeDesp.equals(nomeDespPaga) ){
DespesasFixas df1 = new DespesasFixas();
df1.setCodDespesa(despFixas.get(i).getCodDespesa());
df1.setDataDespesa(despFixas.get(i).getDataDespesa());
df1.setDataVencDespesa(despFixas.get(i).getDataVencDespesa());
df1.setNomeDespesa(despFixas.get(i).getNomeDespesa());
df1.setQuantParcelaPaga(despFixas.get(i).getQuantParcelaPaga());
df1.setQuantParcelaPagar(despFixas.get(i).getQuantParcelaPagar());
df1.setValorDespesa(despFixas.get(i).getValorDespesa());
contasPagar.add(df1);
}
}
}[/code]
[quote=reco162]Boa noite galera!!!
Estou com um problema que é o seguinte:
[list] insiro três despesas no ArrayList despesasFixas[];[/list]
[list]insiro dois pagamentos de despesas no ArrayList pagamento[];[/list]
[list]comparando os dois ArrayList, quero inserir em um terceiro ArrayList contasPagar[], somente as despesas que faltaram serem pagas, e não consigo.[/list]
Quando insiro somente um pagamento da certo, qdo mais de um pagamento não da certo.
Desde já agradeço pela atenção, de quem puder me ajudar.
[code]String nomeDespPaga = null;
String nomeDesp = null;
for(int i=0; i<despFixas.size();i++){
nomeDesp=despFixas.get(i).getNomeDespesa();
for(int a=0; a<PagamentoDespesas_CRUD.pagamento.size();a++){
nomeDespPaga= PagamentoDespesas_CRUD.pagamento.get(a).getNomeDespesaPaga();
if(!nomeDesp.equals(nomeDespPaga) ){
DespesasFixas df1 = new DespesasFixas();
df1.setCodDespesa(despFixas.get(i).getCodDespesa());
df1.setDataDespesa(despFixas.get(i).getDataDespesa());
df1.setDataVencDespesa(despFixas.get(i).getDataVencDespesa());
df1.setNomeDespesa(despFixas.get(i).getNomeDespesa());
df1.setQuantParcelaPaga(despFixas.get(i).getQuantParcelaPaga());
df1.setQuantParcelaPagar(despFixas.get(i).getQuantParcelaPagar());
df1.setValorDespesa(despFixas.get(i).getValorDespesa());
contasPagar.add(df1);
}
}
}[/code]
[/quote]
Vc precisa de um identificador melhor que o nome da despesa, mas usando isso e assumindo que isso é um identificador …
O processo é simples. Vc precia registrar o que ha a pagar e remover o que pagou. Se usar os identificadores fica fácil. Ficariam mais fácil se os objetos nas duas listas fossem o mesmo, mas como não são eis uma opção
// criar um Set com o identificador
Set<String> identificadores = new HashSet<>();
for(int i=0; i<despFixas.size();i++){
identificadores.add(despFixas.get(i).getNomeDespesa());
}
//agora remove todos os que pagou
for(int a=0; a<PagamentoDespesas_CRUD.pagamento.size();a++){
identificador.remove(pagamento.get(a).getNomeDespesaPaga());
}
//neste momento o set identificadores contém os identificadores de todas as despesas que faltam pagar.
Algumas diretrizes:
desconfie de for dentro de for. Substitua pelo uso de Map ou Set
Use numeros inteiros sem significado como identificadores. Duas despesas podem ser diferentes e ter o mesmo nome
Preocupe-se com a nomenclatura que usa. Use i,j,k para indices de for ( ou menor ainda use o for extendido ). Não use _ nos nomes.
Sergio valeu pela dica, mas estou usando java 6.9 e ao tentar implementar este código que vc me enviou, deu erro nesta linha:
Set identificadores = new HashSet<>();
diamond operator is not supported in -source 1.5
(use -source 7 or higher to enable diamond operator)
–
Troque por isso:
Set<String> identificadores = new HashSet<String>();
[quote=regis_hideki]Troque por isso:
Set<String> identificadores = new HashSet<String>();
[/quote]