Collections

3 respostas Resolvido
E

Eai galera, sou novo aqui no GUJ ! Estou com um probleminha em Java, se alguém puder me ajudar agradeço !! É o seguinte, estou usando o HashMap para incluir uns objetos pra salvar em um arquivo, os objetos tem um identificador que uso para passar como chave no hasMap e o Valor que seria o próprio objeto. Quando vou usar o método get, passo a chave, mas o método retorna null. Eu debuguei o projeto e vi que o objeto é encontrado no arquivo, carregado parao hashMap tudo certo mas retorna null. Também já sobrescrevi os métodos equals() e hashcode() no objeto que coloco no hashMap, mas nada adiantou.

3 Respostas

TerraSkilll

Sem ver seu código, fica difícil supor o que está errado. Geralmente, não é preciso mexer com equals() e hashcode(). Um exemplo:

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		new Ideone().executar();
	}
	
	public void executar(){
		Map<String, ClasseProHashMap> mapa = new HashMap<String, ClasseProHashMap>();
		
		ClasseProHashMap cp1 = new ClasseProHashMap("Primeiro", "Joao", 100);
		ClasseProHashMap cp2 = new ClasseProHashMap("Segundo", "Jose", 200);
		
		mapa.put("Primeiro", cp1);
		mapa.put("Segundo", cp2);
		
		ClasseProHashMap testandoGet = mapa.get("Segundo");
		
		testandoGet.imprimir();
		
		ClasseProHashMap testandoGetErrado = mapa.get("ChaveErrada");
		
		testandoGetErrado.imprimir(); // erro, porque nao existe objeto para esta chave
	}
	
	class ClasseProHashMap{
		String chave;
		String nome;
		int valor;
		
		public ClasseProHashMap(String c, String n, int v){
			this.chave = c;
			this.nome = n;
			this.valor = v;
		}
		
		public void imprimir(){
			System.out.println("Chave: " + chave + "  Nome: " + nome + " Valor: " + valor);
		}
	}
}

Veja em http://ideone.com/ZWhgDm .

Abraço.

E

Então TerraSkilll, descobri que o problema ocorre quando recupero o objeto do arquivo. Veja como fiz pra recuperar:

public Map<Integer,E> ler() {
    Map<Integer,E> lista = new HashMap<>();
    E objAux;
    try(ObjectInputStream lerArquivo = new ObjectInputStream(new FileInputStream(arquivo))){
        while((objAux = (E)lerArquivo.readObject())!=null){ 
            lista.put((Integer) (objAux.toString()), objAux);
        }
    }catch(IOException | ClassNotFoundException e){
        return lista;
    }
    return lista;
}

Mas ainda não sei o motivo pelo retorno nulo. Sobrescrevi o método toString() pra retornar uma string com o id do objeto, ai como pode ver eu só faço um cast. Se puder dar uma avaliada no código agradeço !! abraço.

TerraSkilll
Solucao aceita

Está caindo no Exception? Se sim, então a lista vai retornar vazia mesmo.

Se não, o retorno do readObject() é um objeto válido? Já debugou para ver o que está sendo retornado para a variável objAux ? Tentou retornar um objeto concreto ao invés do E (generics)?

Abraço.

Criado 24 de janeiro de 2017
Ultima resposta 25 de jan. de 2017
Respostas 3
Participantes 2