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…