Eu tenho um map que uso como “database” para armazenar algumas coisas. Imagine um sistema de matrículas.
Pois bem. Esse método aqui percorre procurando um curso cadastrado, e eu sei que esse curso existe, mas ainda assim ele só cai no null. Não tô entendendo o pq…
Mas a lista não está vazia e ele está pulando o For-Each aí no debug?
FearX
Então, não está vazia. Na verdade, quando eu chamo o método que procura um curso pelo nome (que usa esse método), ele me retorna tranquilo. Mas quando chamo o método para procurar o curso e fazer a matrícula, ele não acha.
Tava vendo aqui e não entendi uma coisa: O meu database, nesse método, retorna size=0, mas quando chamo ele normalmente apenas procurando ele retorna o size certo. Véi, isso tá me deixando doido, hue.
Mike
Bom dia!
Se você já tem um map com as informações, pq você não busca as informações nele, ao invés de converte-lo para uma lista e então iterar, tendo a possibilidade do curso que você quer estar na última posição? Não é viável utilizar a chave do map como sendo uma String (o próprio nome)? Ou até um Set?
Como o @Daniel95 disse, se a lista esta vazia, vai retornar null mesmo.
Talvez seja necessário postar mais códigos.
FearX
Estou usando um map para simular um banco de dados.
Quando eu cadastro um curso nesse map e quero listar ele, consigo tranquilamente. Mas quando quero criar uma matricula, o getDatabase().values retorna o tamanho de lista 0, e então ele não cai no meu foreach.
Cadastro do curso:
voidcadastrarCurso(){Stringnome=JOptionPane.showInputDialog("Digite o nome do curso");intnumeroAulas=Integer.parseInt(JOptionPane.showInputDialog("Digite o número de aulas"));entity=this.curso.save(newCursoEntity(nome,numeroAulas));JOptionPane.showMessageDialog(null,"Curso cadastrado!\nTítulo: "+entity.getNome()+"\nNúmero de Aulas: "+entity.getNumeroAulas()+"\nID: "+entity.getId());}@OverridepublicCursoEntitysave(CursoEntitycursoEntity){cursoEntity.setId(getNextId());getDatabase().put(cursoEntity.getId(),cursoEntity);returncursoEntity;}
voidfazerMatricula(){
userEntity=userController.encontrarPorNome(JOptionPane.showInputDialog("Digite o nome do aluno a ser cadastrado"));cursoEntity=cursoController.procurarPorNome(JOptionPane.showInputDialog("Digite o nome do curso"));matriculaRepo.save(newMatriculaEntity(selecionarUsuário(userEntity),cursoEntity));
}
}
Acho que basicamente é isso.
Dragoon
O que é getDatabase() e o seu método values()?
Que tipo de retorno é values()?
Porque eu estou perguntando isso, parece que o seu código é repetição
Não existe uma forma de fazer um filtro em vez de um for?
São perguntas porque acho o seu código pode ser melhor!
FearX1 like
Oi, Dragoon. Obrigado pelas sugestões.
O getDatabase() é o get do meu map. O values é metodo do Map, mesmo. Acredito que o tipo de retorno de values é um int.
Dragoon
De um exemplo de values? criando um variavel do tipo e a preenchendo para que eu possa entender! @FearX
D
Daniel95
O values não retorna a Collection dos Values do Map que são as instâncias de Curso cadastradas?
Os valores do Map são sempre armazenados e recuperados em memória? É um atributo de que classe e como é manipulado? O que pode estar acontecendo é de ter mais de uma instância deste Map rolando por aí, e quando você busca e faz matricula, retorne ou consulte instâncias diferentes. No caso desta controller utilizar outro recurso: cursoEntity = cursoController.procurarPorNome(JOptionPane.showInputDialog(“Digite o nome do curso”));
Lucas_Camara
Provavelmente, em algum momento, seu database está sendo recriado. Você precisar controlar bem o estado dele para não ter risco de perder a instância. Como vc está criando seu database? Existe uma classe responsável por cuidar dele (do map)?
Mike1 like
A instância que cadastra é a mesma que consulta?
Você pode tentar aplicar um Singleton ou definir o map como static