Alterar uma string numa Lista

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