Colecoes com classes

boa tarde

estou aprendendo a materia de colecoes em java, e meu professor passou um exercicio, fiz ja leitura sobre list, set e map

e ai vou usar o ArrayList por ser mais facil mas ai to com uma duvida

criei 2 classes

uma telefone e uma contato, cada uma com seus respectivos atributos

sendo que a classe contato pode ter de 0 a N telefones…

minha duvida vem a ser no seguinte sentido…como trabalhar com essas 2 listas ja que uma fica ligada a outra…

Obrigado

Seria esse o relacionamento?

class Contato {
	
	private List<Telefone> telefones;

	public List<Telefone> getTelefones() {
		return telefones;
	}
	
}

class Telefone {
	
	private String numero;

	public String getNumero() {
		return numero;
	}
}

[quote=gabrielfrios]Seria esse o relacionamento?

[code]
class Contato {

private List<Telefone> telefones;

public List<Telefone> getTelefones() {
	return telefones;
}

}

class Telefone {

private String numero;

public String getNumero() {
	return numero;
}

}
[/code][/quote]


public class Telefone {

	private int cod;
	private String num_Telefone;

	public void setCod(int cod) {
		this.cod = cod;
	}

	public String getNum_Telefone() {
		return num_Telefone;
	}

	public void setNum_Telefone(String num_Telefone) {
		this.num_Telefone = num_Telefone;
	}

}

public class ListTelefone {

	private List<Telefone> listTelefone;

	public ListTelefone() {
		listTelefone = new ArrayList<Telefone>();
	}

	public void LimparTelefone() {
		this.listTelefone.clear();
	}

	public void AdcionarTelefone(Telefone t) {
		listTelefone.add(t);
	}

}

public class ListContato {

	private List<Contato> listaContato;

	public ListContato() {
		this.listaContato = new ArrayList<Contato>();
	}

	public void LimparContato() {
		this.listaContato.clear();
	}

	public void AdcionarContato(Contato c) {
		this.listaContato.add(c);
	}
	
	public List<Contato> MostrarListaContato(){
		return this.listaContato;
	}
}
public class Contato {

	private int cod;
	private String nome;
	private String cidade;
	private ListTelefone telefone;
	private String email;

	public void setCod(int cod) {
		this.cod = cod;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public ListTelefone getTelefone() {
		return telefone;
	}

	public void setTelefone(ListTelefone telefone) {
		this.telefone = telefone;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
	
}

Por que criar uma classe só pra ter as listas? Por que não utilizar a orientação a objetos e dizer que Contato tem uma lista de Telefones?

cara estou aprendendo…

o proposito seria o seguinte…

tenho que fazer um programa usando conceitos que estudei de poo, coleções, excessoes…

se quiser me sugerir uma ideia melhor tudo bem

eu preciso gravar isso num txt

pq o contato pode 0 a n telefones…

pensei em guardar em list ou algo do tipo

Opa manolo, estamos aqui pra ajudar. Da uma olhada no exemplo que eu passei, o que você acha dele? Você não acha que fica mais entendível? Fica bem explícito que Contato tem vários Telefones e fica mais fácil de trabalhar também.

[quote=gabrielfrios]Seria esse o relacionamento?

[code]
class Contato {

private List<Telefone> telefones;

public List<Telefone> getTelefones() {
	return telefones;
}

}

class Telefone {

private String numero;

public String getNumero() {
	return numero;
}

}
[/code][/quote]

vi seu exemplo e vc criou uma lista de telefones dentro do contato…

seria isso nao?

pq vc discordou do meu?

Isso mesmo. Na verdade eu não discordei, te mostrei uma solução, que ao meu ver, é melhor, mais orientado a objetos. Na sua implementação vc está encapsulando sua lista em outra classe e novamente, ao meu ver, não seria uma boa solução.

entendi eu acho

pq eu criei as classes das entidades

depois criei as classes das listas das entidades

e ai comecei a usar elas…

vc ta dizendo pra eu ir direto ao ponto né?

Isso manolo.

mas ai vem uma duvida…como acessar a lista de telefones a partir da lista de contatos?

Vamos por passos, quem tem a lista de contatos? vamos supor que seja uma Pessoa. então ficamos assim:

Uma pessoa tem uma lista de contatos, e cada contato tem uma lista de telefones. Você tem que ir acessando hierarquicamente.

Fez sentido?

[quote=digaoneves]Vamos por passos, quem tem a lista de contatos? vamos supor que seja uma Pessoa. então ficamos assim:

Uma pessoa tem uma lista de contatos, e cada contato tem uma lista de telefones. Você tem que ir acessando hierarquicamente.

Fez sentido?[/quote]

Um contato PODE ( 0…N) ter varios numeros de telefone

[quote=macario1983][quote=digaoneves]Vamos por passos, quem tem a lista de contatos? vamos supor que seja uma Pessoa. então ficamos assim:

Uma pessoa tem uma lista de contatos, e cada contato tem uma lista de telefones. Você tem que ir acessando hierarquicamente.

Fez sentido?[/quote]

Um contato PODE ( 0…N) ter varios numeros de telefone[/quote]

Eu sei, cara, se você diz como pode ter acesso a um contato específico, aí a situação é diferente.

O ArrayList você acessa por índice, se quer pegar o primeiro da lista tem que fazer assim:Contato contato = listaContatos.get(0); então no caso pra fazer o que você quer, pegaria a lista de telefones após isso, mas isso não fica muito bonito enviando um número pra buscar o contato, né, como você vai saber se é o cara que você quer?

Nesse caso eu sugiro que use uma implementação de Map, você ja leu sobre elas?

[quote=digaoneves][quote=macario1983][quote=digaoneves]Vamos por passos, quem tem a lista de contatos? vamos supor que seja uma Pessoa. então ficamos assim:

Uma pessoa tem uma lista de contatos, e cada contato tem uma lista de telefones. Você tem que ir acessando hierarquicamente.

Fez sentido?[/quote]

Um contato PODE ( 0…N) ter varios numeros de telefone[/quote]

Eu sei, cara, se você diz como pode ter acesso a um contato específico, aí a situação é diferente.

O ArrayList você acessa por índice, se quer pegar o primeiro da lista tem que fazer assim:Contato contato = listaContatos.get(0); então no caso pra fazer o que você quer, pegaria a lista de telefones após isso, mas isso não fica muito bonito enviando um número pra buscar o contato, né, como você vai saber se é o cara que você quer?

Nesse caso eu sugiro que use uma implementação de Map, você ja leu sobre elas?[/quote]

Ler eu li, ontem ate conversando com meu professor sobre isso…ler até que é facil sobre set, list e map mas o problema é na hora de usar…codigo!!!

Eu peguei um codigo de exemplo e joguei no eclipse de um hashmap e deu erro

Era muito estranho…

Outro detalhe, irei acessar o contato oferencendo a opcao ao usuario o codigo, nome, cidade ou email…pois o exercicio pede isso

voce tem que conseguir acessar o contato com qualquer uma dessas informações? é isso ?

isso…

terei que acessa, ja comecei a ler um pouco sobre maps cara

eu usei set para nao deixar inserir contato repetido na lista…

fazendo o uso do valor booleano retornado pelo metodo add

você tem algo pronto aí ja?

Porque creio que a idéia seja correr a lista de Contato, buscando pelo atributo informado. Vamos supor que a busca é por nome, aí faz assim:for(Contato contato : listaContatos){ if(contato.getNome().equals(nomeInformado)){ System.out.println(contato); } }

Supondo que a variável nomeInformado possui a String que o usuário digitou. Não sei se isso é muito avançado para o que você está acostumado, você ja percorreu arrays, listas?

[quote=digaoneves]você tem algo pronto aí ja?

Porque creio que a idéia seja correr a lista de Contato, buscando pelo atributo informado. Vamos supor que a busca é por nome, aí faz assim:for(Contato contato : listaContatos){ if(contato.getNome().equals(nomeInformado)){ System.out.println(contato); } }

Supondo que a variável nomeInformado possui a String que o usuário digitou. Não sei se isso é muito avançado para o que você está acostumado, você ja percorreu arrays, listas?[/quote]

ter algo pronto tenho mas resolvi refazer meu trabalho ainda mais que a faculdade entrou de greve acho que terei bastante tempo para ver isso

sobre o q vc passou é um for each que eu ja li no deitel e ontem fiz de exemplo

problema de que estou aprendendo e me sinto as vezes perdido para fazer um trabalho bem organizado e usando bem a linguagem por isso pedi a ajuda

por exemplo o cara la em cima pediu para eu colocar um arraylist da classe telefone dentro da classe contato

queria dicas da moçada que sabe bem mais q eu

vi aqui o problema do map eu estava coloando tipo primitivo

Muito bem então.

A idéia do Map era pra caso você tivesse uma chave fixa pra buscar seu objeto, mas como você tem que conseguir buscar por mais de uma chave, acho melhor você iterar um por um. Fica mais simples.

você precisa de um mecanismo de controle pra saber qual chave será usada no momento, se é o nome ou qualquer uma das outras.