Collection/Map

6 respostas
M

Tenho a seguinte duvida:

List<DadosPessoa> listaDadosPessoa = new ArrayList<DadosPessoa>();

for (DadosPessoa dados : listaDadosPessoa) {

this.nome = dados.nome;

this.tipo = dados.tipo;

this.contrato = dados.contrato;

thiscodigo = dados.codigo;

}

Tenho que fazer uma comparação de cruzada, onde eu gero um arquivo com todas essa informações e tenho que setar o "tipo’ como “pessoa fisica” ou “pessoa juridica”, porem talvez eu tenha o mesmo “nome”, nas linhas que vou exportar, por isso a necessidade de saber se eh pessoa, definir o nome do “contrato”, por exemplo:

se eu tiver “dados.nome = joao silva e dados.tipo=15” e defino com um sequencial o seguinte contrato:

= JS15PF-501XQ1

Pra isso preciso de uma rotina que aloque todos os nomes e compare entre eles se há igualdade, por favor me ajuder…

6 Respostas

F

Bem ta tudo meio confuso, mas vamos ver se chegamos em um lugar.

Para você fazer comparações em um List, temos 2 opções:

:arrow: Uma é a sua classe implementar a interface java.lang.Comparable e terá que implementar o método compareTo da interface.

:arrow: Outra forma seria criar uma classe que faça essa comparação, e essa classe deverá implementar a interface java.util.Comparator implementando o método compare.

Caso você tenha dificuldade em fazer essas implementações, posta ai para que possamos ajudar.

Att
Fabiano Fernandes

M

Pode me mostrar um exemplo?

M

M

ist<DadosPessoa> listaDadosPessoa = new ArrayList<DadosPessoa>();

for (DadosPessoa dados : listaDadosPessoa) {

this.nome = dados.nome;

this.tipo = dados.tipo;

this.contrato = dados.contrato;

thiscodigo = dados.codigo;

}

Tenho que gerar um arquivo com esses dados, entaum ao gerar arquivo tenho que definir a ultima informação de cada linha (contrato), por exemplo:

MARCOS LIMA PF 501 ML15PF-501XQ1
MARCO LEMOS PJ 502 ML215PJ-502XQ1
JOAO SILVA PF 503 JS15PF-503XQ1

Na realidade esse exemplo eu inventei pra dissernir melhor a duvida…
Porem eu so queria um exemplo de como se compara List ou Set para caso haja repetição de informações eu poder controlar os dados.

F

Desculpe a demora ... to meio enrolado aqui .. mas vamos lá .. chega de blá blá blá.

public class Pessoa implements Comparable<Pessoa>{
	private int cod;
	private String nome;
	private String cpf;
	
	public Pessoa(int cod, String nome, String cpf) {
		this.cod = cod;
		this.nome = nome;
		this.cpf = cpf;
	}
	
	//get e sets
	
	public String toString(){
		return cod + " " + nome + " " + cpf;
	}
	//Este método faz a comparação para ordenar naturalmente
	public int compareTo(Pessoa objeto){
		return this.cod - objeto.cod;
	}
}

Para testar esse exemplo segue essa classe.

public class TesteCompareTo {
	public static void main(String[] args) {
		Pessoa people1 = new Pessoa(1528, "Fabiano Fernande", "[CPF removido]");
		Pessoa people2 = new Pessoa(1321, "Richard Cliver", "[CPF removido]");
		Pessoa people3 = new Pessoa(111, "Fulano de Tal", "[CPF removido]");
		Pessoa people4 = new Pessoa(1321, "Ciclano da Silva", "[CPF removido]");

		comparaPessoa(people1, people2, people3, people4);
		comparaPessoa(people2, people1, people3, people4);
		comparaPessoa(people4, people3, people2, people1);
		comparaPessoa(people3, people2, people1, people4);

	}

	public static void comparaPessoa(Pessoa... pessoas) {

		Pessoa position = pessoas[0];

		System.out.println("A pessoa " + position.getNome());
		for (int i = 1; i < pessoas.length; i++) {
			if (position.compareTo(pessoas[i]) > 0)
				System.out.println("\tÉ maior que a pessoa "
						+ pessoas[i].getNome());
			else if (position.compareTo(pessoas[i]) < 0)
				System.out.println("\tÉ menor que a pessoa "
						+ pessoas[i].getNome());
			else if (position.compareTo(pessoas[i]) == 0)
				System.out.println("\tÉ igual a pessoa "
						+ pessoas[i].getNome());
		}

	}

}

Repare no método comparaPessoa
:arrow: Se o campo cod do objeto for menor que o mesmo campo do objeto passado, então retorna-se um número estritamente negativo, indicando que este objeto é "menor" que o objeto passado

:arrow: Se o campo cod deste objeto for maior que o mesmo campo do objeto passado, então retorna-se um número estritamente positivo, indicando que este objeto é "maior" que o objeto passado

:arrow: Se o campo cod deste objeto for igual ao mesmo campo do objeto passado, então retorna-se o número zero, indicando que este objeto é "igual" ao objeto passado.

Espero que com esse exemplo e essas observações fique mais facil você implementar a sua lógica.

Qualquer outra dúvida ou esclarecimento grita ai q tentamos ajudar

OK

:lol:

M

Resolvido o problema!

Obrigado, vc me ajudou muito!!

Valeu!

Criado 16 de janeiro de 2007
Ultima resposta 16 de jan. de 2007
Respostas 6
Participantes 2