Bom dia!
Certamente existem tópicos para que se altere o item de uma lista.
Mas a diferença na minha necessidade é que a minha lista está dentro de um objeto.
É feita uma consulta com JPA e Java 7 que trás o Objeto “Compra” com vários campos e também já trás a lista com os itens da compra.
Os itens não têm nome apenas índices.
Eu preciso pegar um item desta lista e alterar o seu valor.
Eu consigo até pegar o item da lista, mas não sei como alterá-lo e devolver o novo valor a lista que está dentro do objeto.
Então minha dificuldade está em manipular uma lista que está em um objeto.
Alguém poderia me ajudar?
Grato.
Já progredi no meu código e agora preciso saber como alterar um item da lista onde
seus itens não tem nome, tem apenas índices.
Ex.:
List[0] = “Chave”
List[1] = “São Paulo”
List[2] = “9999991234”.
Preciso alterar o valor do índice 2.
Imagino que em vez de lista, vc esteja querendo dizer vetor (são coisas diferentes). Dentro da classe onde o vetor está declarado, vc pode ter um método que recebe o índice e o valor novo:
Vc podia mudar o nome da variável do vetor de List para algo que indique melhor o que ele representa, como por exemplo: itens[]:
public class Compra {
private String[] itens = new String[10];
public void alterarItem(int indice, String novoNomeItem) {
itens[indice] = novoNomeItem;
}
}
Eu estava tentando fazer assim mas não havia entendido que o meu list é de objetos.
Eu tenho tipo a venda e os itens da venda são uma outra entidade que vem como um List(itens).
Aí estou apanhando pra devolver o valor de um item corrigido por que não consigo fazer como você indica no método alterarItem.
Tah confuso. Talvez é melhor vc postar essa sua classe Compra pra gente ver.
Eu tenho as classes:
public class ArquivoRetorno {
@Id
@Generat....
@Column(name = "ID_ARQUIVO_RETORNO")
private Long id;
@Column(name = "NOME_ARQUIVO_RETORNO")
private string nome;
@Column(name = ...)
private Date dataProcessamento;
@OneToMany(mappedBy = "arquivo", fetch = FetchType.LAZY)
private List<ItemArquivoRetorno> itens = new ArrayList<ItemArquivoRetorno>();
// Getters e Setters
}
public class ItemArquivoRetorno {
@Id
@Generat....
@Column(name = "ID_ARQUIVO_RETORNO_ITEM")
private Long id;
@Column(name = ...
private string nomeItem;
@Column(name = ......
private Date dataProcessamento;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID_ARQUIVO_RETORNO")
private List<ItemArquivoRetorno> itens = new ArrayList<ItemArquivoRetorno>();
// Getters e Setters
}
protected void processarArquivo(ArquivoRetorno arquivoRetorno) {
arquivoRetorno = arquivoRetornoDAO.findOne(arquivoRetorno.getId());
// ESTA CONSULTA TRÁS O AquivoRetorno E SEUS ITENS (ItemArquivoRetorno) É
// AUTOMÁTICO.
// PEGUEI OS Itens DESTA CLASSE E JOGUEI PARA UM "List < ItemArquivoRetorno >"
// Estes Itens não têm nome só índices.
// Consegui separar o item que preciso alterar mas não consigo devolver o novo valor para ele.
// itens[indice] = novoNomeItem; não funciona.
Ah sim, então é realmente uma lista. Fiz confusão pq vc colocou assim List[0] num exemplo. Mas blz.
Essa parte está confusa, pq se está mapeado a lista de itens do tipo ItemArquivoRetorno na classe ArquivoRetorno, vc deveria ter acesso à todas as propriedade e não somente ao índice.
Não entendi pq vc mapeou a lista de itens na classe ItemArquivoRetorno. Um item pode ter outros itens? Ou não deveria ser mapeado a entidade ArquivoRetorno ao invés disso? Veja:
Em vez de:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID_ARQUIVO_RETORNO")
private List<ItemArquivoRetorno> itens = new ArrayList<ItemArquivoRetorno>();
Seria:
@ManyToOne
@JoinColumn(name = "ID_ARQUIVO_RETORNO")
private ArquivoRetorno arquivoRetorno;
Essa parte está confusa, pq se está mapeado a lista de itens do tipo ItemArquivoRetorno na classe ArquivoRetorno
Isso é do JPA, não sou eu quem faz.
Eu joguei os itens em uma Entidade ItemArquivoRetorno para poder manipulá-los.
Consigo devolvê-los também.
Um ArquivoRetorno tem vários ItemArquivoRetorno de acordo com as anotações (@OneToMany e @ManyToOne)
Eu alterei um dos itens da Lista mas agora não sei como devolver o item alterado a lista.
Estou tentando com itensArquivoRetorno.set(i). mas não está rolando.
Estes Itens não têm nome só índices --> Esta informação está errada eu tenho o campo, se chama conteudo. Normalmente a gente usaria setConteudo pra atribuir mas na lista não estou conseguindo.
Consegui resolver.
É bem simples, eu que sou neófito.
Resposta: itensArquivoRetorno.get(i).setConteudo(novoConteudo);
1 curtida