[RESOLVIDO]Array de objetos JAVA

Boa tarde pessoal… Estou com o seguinte problema em meu código

 List<FinBancos> lContas;
    Controller c = new Controller();
    em = c.getEntityManager();
    try {
        lContas = em.createQuery("SELECT t FROM FinBancosConta t").getResultList();
    } finally {
        em.close();
    }
    System.out.println(lContas);

    //      return lContas;
    String nome = null;
    for (FinBancosConta conta : getContas()) {
        nome = conta.getDsNick();
        

   Object[] opcoes ={nome};
   Object res = JOptionPane.showInputDialog(null, "Escolha um item", "Selecao de itens", 
           JOptionPane.PLAIN_MESSAGE, null, opcoes, "");

Retorno no console [Conta itaú, Banco do Brasil, Banco teste]

Resultado do meu ComboBox

resultado

Está apenas me retornando o ultimo registro… Como faço para me mostrar todos os resultados?

A cada iteração do for você sobrescreve o valor de nome, e no final ele só terá o nome do último.

O que você tem que fazer é guardar todos os nomes no array. Mas para isso você precisa criá-lo antes, e o tamanho do array deve ser o mesmo da lista de contas.

Estou assumindo que getContas() retorna uma lista de FinBancosConta:

// obtém a lista de FinBancosConta
List<FinBancosConta> contas = getContas();
// cria o array com o mesmo tamanho da lista
Object[] opcoes = new Object[contas.size()];
// adiciona todos os nomes no array
for (int i = 0; i < opcoes.length; i++) {
    opcoes[i] = contas.get(i).getDsNick();
}
// pronto! :-)
Object res = JOptionPane.showInputDialog(null, "Escolha um item", "Selecao de itens",
        JOptionPane.PLAIN_MESSAGE, null, opcoes, "");

Mas se getContas retorna um array, basta mudar para:

FinBancosConta[] contas = getContas();
Object[] opcoes = new Object[contas.length];
for (int i = 0; i < opcoes.length; i++) {
    opcoes[i] = contas[i].getDsNick();
}

A partir do Java 8, também dá para usar streams (ainda assumindo que getContas retorna um List<FinBancosConta>):

Object[] opcoes = contas.stream().map(FinBancosConta::getDsNick).toArray();

Mas se getContas retorna um array, ficaria:

Object[] opcoes = Stream.of(getContas()).map(FinBancosConta::getDsNick).toArray();
2 curtidas

RESOLVIDO!!! Muito obrigado Hugo!

Alguma solução para que eu posso retornar os dados do item selecionado?

A variável res terá o nome que foi escolhido. Então teria que percorrer a lista de contas e ver qual tem esse nome (se entendi direito o que vc quer)

Digo, como estou puxando um item do banco, quero retornar o id (item) selecionado, como seus atributos, agencia, conta…

Então acho que é isso mesmo, vc pega o res (que é o nome que foi escolhido) e procura na lista qual tem o nome. Algo do tipo:

for (FinBancosConta conta : getContas()) {
    if (conta.getDsNick().equals(res)) {
        // "conta" é a que tem o nome escolhido, faz o que quiser com ela
    }
}
1 curtida