Percorrer um Set para salvar no banco

Minha dúvida é como percorrer um Set para salvar varios itens ao mesmo tempo.

for ("qual a condição que faço para percorrer todo meu Set") { item.setCompra(compra); // objeto compra armazena o id da compra p.getItemcompras(); // aki o p é um Set armazendo varias peças dessa forma so armazena a 1º posicao do Set item.setPeca(p); // aki esta setando o item item.setQuantidade(5); Dao.salvar(item); // aki salva o 1º posicao do Set gostaria de salvar todo o Set }

dessa forma queria que fica-se dessa forma

Ex:
1 - Compra possui 5 itens

IdItemCompra=1 idcompra =2 iditem=1item qnt
IdItemCompra=2 idcompra =2 iditem=2item qnt
IdItemCompra=3 idcompra =2 iditem=3item qnt
IdItemCompra=4 idcompra =2 iditem=4item qnt
IdItemCompra=5 idcompra =2 iditem=5item qnt

Use um for. A única condição é que você tenha parametrizado corretamente o tipo do Set para usar. Exemplo:

Set<String> set = new TreeSet<String>();
set.add ("abc");
set.add ("efg");
set.add ("123");
...

for (String item : set) {
    System.out.println (item);
}

Note que a ordem em que os elementos serão retornados dependem do tipo do Set. Um TreeSet retorna ordenado, um HashSet retorna desordenado, e um LinkedHashSet retorna na ordem de inserção dos elementos.

Outra coisa. Você precisava de um contador, certo? Nesse caso, é melhor você fazer um contador separado. Continuando o exemplo acima:

Set<String> set = new TreeSet<String>();  
set.add ("abc");  
set.add ("efg");  
set.add ("123");  
...  
  
int nItem = 1;
for (String item : set) {  
    System.out.println (nItem + ":" + item);  
    nItem++;
} 

[quote=entanglement]Outra coisa. Você precisava de um contador, certo? Nesse caso, é melhor você fazer um contador separado. Continuando o exemplo acima:

[code]
Set set = new TreeSet();
set.add (“abc”);
set.add (“efg”);
set.add (“123”);

int nItem = 1;
for (String item : set) {
System.out.println (nItem + “:” + item);
nItem++;
}
[/code][/quote]

Entendi, fiz dessa forma:

 for (Object obj : set ) {
                item.setCompra(compra);
                item.setPeca((Peca)obj);// é do tipo Peça entao faço um cast
                item.setQuantidade(5);
                Dao.salvar(item);
            }

Só que ocrre um erro java.lang.ClassCastException: java.util.Vector cannot be cast to Model.Peca

Bom, você conhece aquela história do … Melhor não contar aqui, que senão vou ser processado.

Só para você ficar sabendo: em Java, cast não faz conversão. Cast não faz conversão. Repita comigo: cast não faz conversão.

Ele só serve para você testar o tipo do objeto, e dar um ClassCastException se o tipo não for adequado.

Portanto, confira (debugue seu programa com alguma IDE como o Eclipse ou o NetBeans) para ver por que nessa lista de objetos está vindo um Vector de sei lá o quê, em vez de uma Peca.

Se o seu set é de Peca, o for não teria que ser com uma peça?

tipo:

 for (Peca obj : set ) {
                item.setCompra(compra);
                item.setPeca((Peca)obj);// é do tipo Peça entao faço um cast
                item.setQuantidade(5);
                Dao.salvar(item);
            }

(???)
Sei la, como o cara disse ai em cima, vc tem que saber exatamente qual o tipo do vetor que você tá percorrendo

Dica: não sei, mas não acho “set” um nome muito bom pra variável… :wink: