0

I have a List in which I am adding registry, but I noticed that the registry comes duplicated, for that I used a set, but the set only returns me a single registry instead of a List, can someone help me?

 List < Unidades_de_Acondicionamento__c > UnidadesDeAcondicionamentos = 
     new List < Unidades_de_Acondicionamento__c > ();

 Unidades_de_Acondicionamento__c UnidadeDeAcondicionamento = 
     new Unidades_de_Acondicionamento__c();

   for (Integer i = 0; i < cod_artList.size(); i++) {
       UnidadeDeAcondicionamento.Codigo_X3__c = cod_artList[i];
       UnidadeDeAcondicionamento.Unidade__c = unidadeList[i];
       UnidadeDeAcondicionamento.Descricao__c = descricaoList[i];
       UnidadeDeAcondicionamento.Coeficiente__c = Decimal.valueOf(coeficienteList[i]);
       UnidadeDeAcondicionamento.Chave_Import__c = ch_importList[i];
       UnidadeDeAcondicionamento.Produto__c = mapProdutos.get(cod_artList[i]);

       UnidadesDeAcondicionamentos.add(UnidadeDeAcondicionamento);

       System.debug(UnidadeDeAcondicionamento);

        } //for
          //Duplication the records
       Set<Unidades_de_Acondicionamento__c> setUnid = 
           new Set<Unidades_de_Acondicionamento__c>();

       List<Unidades_de_Acondicionamento__c> UnidAInserir = 
          new List<Unidades_de_Acondicionamento__c>();

          setUnid.addAll(UnidadesDeAcondicionamentos);
          UnidAInserir.addAll(setUnid);

          System.debug(setUnid);

          if(!isTest){
            insert UnidAInserir;
          }
2
  • Can you clarify a bit on this -- [but the set only returns me a single registry instead of a List]? If you add elements to a Set, it will add only unique elements, and if your List has duplicates, it will not add any other values. What are you trying to achieve, can you add more details? – Jayant Das Dec 13 '18 at 16:09
  • Hello Daniela, it is not very clear what the problem is. It also looks like this is only one part of the code. Can you please try to update the question with more details? – Carlos Naranjo Dec 13 '18 at 19:20
1

Your custom object record instance was outside of the loop. Since there was only one instance of the record, each iteration of the for loop would overwrite the field values on that one record.

The creation of the Unidades_de_Acondicionamento__c record should be inside the loop.

This also should remove the need for a set

List <Unidades_de_Acondicionamento__c> UnidadesDeAcondicionamentos = new List <Unidades_de_Acondicionamento__c>();

for (Integer i = 0; i < cod_artList.size(); i++) {

  // create one record for each iteration
  Unidades_de_Acondicionamento__c UnidadeDeAcondicionamento = new Unidades_de_Acondicionamento__c();

  UnidadeDeAcondicionamento.Codigo_X3__c = cod_artList[i];
  UnidadeDeAcondicionamento.Unidade__c = unidadeList[i];
  UnidadeDeAcondicionamento.Descricao__c = descricaoList[i];
  UnidadeDeAcondicionamento.Coeficiente__c = Decimal.valueOf(coeficienteList[i]);
  UnidadeDeAcondicionamento.Chave_Import__c = ch_importList[i];
  UnidadeDeAcondicionamento.Produto__c = mapProdutos.get(cod_artList[i]);

  UnidadesDeAcondicionamentos.add(UnidadeDeAcondicionamento);

  System.debug(UnidadeDeAcondicionamento);

} 

insert UnidadesDeAcondicionamentos;
0

Not the answer you're looking for? Browse other questions tagged or ask your own question.