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 - , 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 Map<String, Pessoa> retornaDados( Set<String> conjuntoPessoas) throws FormatoIncorretoException
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
Curtir tópico
+ 0
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();
}
}
}
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
Clique aqui para fazer login e interagir na Comunidade :)