GARANTIR DESCONTO

Fórum Iterator e HashMap #598893

29/11/2018

0

Preciso de ajuda pra resolver um exercicio que diz q: Tenho q criar um metodo numa classe com a seguinte assinatura -
public Map<String, Pessoa> retornaDados( Set<String> conjuntoPessoas) throws FormatoIncorretoException
, sendo que nesse conjunto que eu recebo como parametro, as Strings estao num formato "CPF#nome#idade#tipo", exemplo: 143260527-59#Wendel Rios#25#PF, onde esse tipo indica q 'PF' eh PessoaFisica e 'PJ' eh PessoaJuridica. O codigo que eu estou desenvolvendo eh o seguinte - Eu preciso percorrer cada String desse conjunto, e criar um Mapa onde o CPF indica a chave do meu objeto, e o valor sera uma instancia de PessoaFisica ou PessoaJuridica, de acordo com a ultima letra das Strings, ou seja, 'F' ou 'J', e caso alguma dessas Strings tenha menos de 3 # ou mais de 3 # eu devo lancar a excecao 'FormatoIncorretoException'. Eu estou com problema no momento de comparar a String do tipo com as letras 'F' ou 'J', segue o codigo.

public class Pessoa implements Comparable<Pessoa>{
	
	private String cpf;
	private String nome;
	private Integer idade;
	
	public Pessoa(String cpf) {
		this.cpf = cpf;
	}
	
	public String getCpf() {
		return this.cpf;
	}
	
	public String getNome() {
		return this.nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public Integer getIdade() {
		return this.idade;
	}
	
	public void setIdade(Integer idade) {
		this.idade = idade;
	}
	
	public boolean equals(Object obj) {
		if(obj == null) {
			throw new NullPointerException("referencia passada nula");
		}
		if(!(obj instanceof Pessoa)) {
			return false;
		}else {
			Pessoa pessoa =(Pessoa)obj;
			return this.getCpf().equals(pessoa.getCpf()) && this.getIdade().equals(pessoa.getIdade());
		}
	}
	
	public int compareTo(Pessoa p) {
		return this.getNome().compareTo(p.getNome());
	}
	
	public String toString() {
		return getNome()+getCpf()+getIdade();
	}
}


public class FormatoIncorretoException extends Exception{
	
	private int codigo;
		
	public FormatoIncorretoException(String message, int codigo) {
		super(message);
		this.codigo = codigo;
	}
	
	public int getCodigo() {
		return this.codigo;
	}
}


import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.HashMap;

public class Utils implements Iterator<String>{
	
	public boolean existe(List<Pessoa>x, Pessoa y) {
		if(x.contains(y)) {
			System.out.println("Objeto encontrado na colecao");
			return true;
		}else {
			System.out.println("Objeto nao encontrado na colecao");
			return false;
		}
	}
	
	public static void ordena(List<Pessoa> x) {
		Collections.sort(x);
		System.out.println("Exibido em ordem alfebetica");
	}
	
	public Map<String, Pessoa> retornaDados(Set<String> conjuntoPessoas) throws FormatoIncorretoException{
		Iterator<String> i = conjuntoPessoas.iterator();
		while(i.hasNext()) {
			String s = i.next();
			String[] s2 = s.split("#");	
			for(int ii=0;ii<s2.length;ii++){
				Map<String, Pessoa> mapa = new HashMap<>();
				if(pegarUltimaLetra(s2[i])=='J') {//compilador diz q nao posso converter de Iterator<String> para int
					
				}
				//mapa.put("s2[i]", )
			}
		}	
	}
	
	public static char pegarUltimaLetra(String str) {
		char s = str.charAt(str.length()-1);
		return s;
	}
}
Wendel Rios

Wendel Rios

Responder

Posts

30/11/2018

Ricardo Pestana

bom dia,


Se vc quiser ordenar por outro campo que não seja a chave talvez seja melhor tratar a saída em uma interface List ou Set, mas vou seguir mais ou menos seu exemplo..... se vc deixar seu método retorna dados assim (não entendi como vai tratar PJ...) pelo menos a iteração vai funcionar... :


public Map<String, Pessoa> retornaDados(Set<String> conjuntoPessoas) throws FormatoIncorretoException{
Map<String, Pessoa> dadosRetorno = new TreeMap<>();
Iterator<String> i = conjuntoPessoas.iterator();
while(i.hasNext()) {
String registro = i.next();
String[] campos = registro.split("#");
if (campos[3].equalsIgnoreCase("PF")){
Pessoa p = new Pessoa(campos[0]);
p.setNome(campos[1]);
p.setIdade(Integer.parseInt(campos[2]));
dadosRetorno.put(campos[0], p);
} else {
// // tratar pessoa juridica
return null;
}
}

return dadosRetorno;
}


aqui a classe com o método main:

public class Teste {

public static void main(String[] args) {

Set<String> lista = new HashSet<>();
lista.add("143260527-59#Wendel Rios#25#PF");
lista.add("143260527-59#Wendel Rios#25#PF"); // repare que esse registro nao foi inserido devido a sua implementação do metodo equals na classe pessoa
lista.add("143260527-55#Wendel#25#PF");
lista.add("143260527-57#Rios#25#PF");
Utils u = new Utils();
try {
Map<String, Pessoa> pessoas = u.retornaDados(lista);
for (Pessoa p : pessoas.values()) {
System.out.println(p.getCpf() + " - " + p.getNome());
}
} catch (FormatoIncorretoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



}

}
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar