Buscar qualificação no objeto

7 respostas
ivolanski

Olá pessoal,

Imaginem que tenho um objeto pessoa que tem várias qualificações em boolean

exemplo:

pessoa.cabeloCurto = false;

pessoa.bemArrumada = true;

pessoa.cheirosa = true;

pessoa.feia = false;

etc etc

ok, ok a sintaxe não é bem assim, mas é  pra entender 

agora tenho que verificar se essa pessoa tem as qualificações solicitadas pelo usuário

por exemplo, se o usuário solicitou uma pessoa cheirosa, pouco importa se ela é feia ou não, deve ser cheirosa e é isso q importa

teria como fazer algo cheio de if mais ou menos assim

verificaQualificacao(boolean cabeloCurto, boolean bemArrumada, boolean cheirosa, boolean feia){if… if… if… return true ou false…}

verificar cheirosa:
boolean cheirosa = verificaQualificacao(tantofaz, tantofaz, true, tantofaz);

ou assim:

boolean cheirosa = verificaQualificacaoObjeto(pessoaPopuladaPorStruts);

acho que ficaria pouco elegante e dependendo do numero de qualificações pode se tornar uma função absurdamente grande

Gostaria de idéias de como resolver isso de uma maneira mais interessante.

Obrigado.

P.S: se eu pudesse usar consulta ao banco de dados seria facil, mas tem q ser com objetos já populados…
P.S.2: não é um sistema de bordel, kkkk, isso foi um exemplo q achei para facilitar a explicação…

7 Respostas

otaviojava

você pode fazer a busca de dados com essas condições, acredito que será uma boa pedida dessa forma.

ivolanski

Vc
Quer dizer
No banco ???

otaviojava

exato.
Acredito que a implementação ficará mais fácil além de ficar menos coisa na memória principal, já que terá somente o que você buscar.

ivolanski

Como eu já tinha informado, nao tenho essa possibilidade.
Isso é na verdade um array de objetos e é feita uma comparação a cada milissegundo.
Seria muito custoso buscar no banco.
A grande sacada é uma forma de implementar isso sem usar o banco…
O problema é, como fazer isso ???

D

Cara vc poderia usar um hashmap pra fazer isso…

onde vc teria a chave o valor no seu caso bonita, e este traria um lista de objetos de pessoas bonitas…

ex:

public class Teste {  
	  public static void main(String args[]) {  
		  
		 Map<String,String> map = new HashMap<String,String>();
		 map.put("linda", "Vanessa");
		 map.containsKey("linda");
		 
		 System.out.println("Existe pessoa linda ele é "+ map.get("bonita"));

	  }  
	}

testa ai qualquer coisa posta denvo que te ajudo!!!
abraço!!

ivolanski

Essa soluçao de hashMap parece ficar bem elegante, só não entendi como seria trabalhar com multiplas qualificações.
Outro detalhe é que eu não quero achar uma pessoa com as qualificações desejadas, e sim quero descobrir se a pessoa escolhida tem as devidas qualificações solicitadas.
Essa diferença existe pois na verdade o fluxo passa por outros filtros antes.
Eu acabei fazendo com if mesmo, vou mostrar como ficou e se tiverem alguma sugestão de melhorar fico agradecido

Fluxo:

O cliente pede um taxi na casa dele
O sistema compara a localização de cada taxi com o endereço do cliente e gera um array ordenado pela distancia
o sistema pega o taxi mais proximo do cliente e verifica se ele tem as qualificações desejadas, se tiver avisa o taxista, se não tiver, pega o próximo taxi mais perto.

Segue aqui a classe que fiz que verifica a qualificação,
As qualificações que o cliente solicitou ficam em Corrida
ainda não botei ela pra rodar mas deve estar certa…

package br.com.sistaxi.auxiliar;

import br.com.sistaxi.beans.Corrida;
import br.com.sistaxi.beans.Taxi;

public class Qualificador {

	public boolean verifica(Corrida corrida, Taxi taxi) {
		// verifica se procura por animal
		if (corrida.getQualificacao().isAnimal()) {
			if (!taxi.getQualificacao().isAnimal()) {
				return false;
			}
		}// fim da procura

		// verifica se procura por ar
		if (corrida.getQualificacao().isAr()) {
			if (!taxi.getQualificacao().isAr()) {
				return false;
			}
		}// fim da procura

		// verifica se procura por cartao
		if (corrida.getQualificacao().isCartao()) {
			if (!taxi.getQualificacao().isCartao()) {
				return false;
			}
		}// fim da procura

		// verifica se procura por luxo
		if (corrida.getQualificacao().isLuxo()) {
			if (!taxi.getQualificacao().isLuxo()) {
				return false;
			}
		}// fim da procura

		// verifica se procura por mala
		if (corrida.getQualificacao().isMala()) {
			if (!taxi.getQualificacao().isMala()) {
				return false;
			}
		}// fim da procura

		// verifica se procura por viagem
		if (corrida.getQualificacao().isViagem()) {
			if (!taxi.getQualificacao().isViagem()) {
				return false;
			}
		}// fim da procura

		return true;
	}

}
D

amigo isso foi apenas um exemplo onde vc poderia procurar atraz de uma chave o valor, vendo rapidamente sua classe, (“Estou no trab nao pude analizar direito sorry”) o que vc quer pode ser usado dessa mesma forma que te passei a unica diferença que o valor vai ser uma lista de lugares…

ex:

vc teria na chave o lugar onde os taxis estao ex: Rio de janeiro, e no valor os taxis disponiveis no rio de janeiro…

espero ter ajudado como disse ve rapidamente vou ver se faço um exemplo mais detalhado em casa…

abraço!!

Criado 16 de novembro de 2011
Ultima resposta 17 de nov. de 2011
Respostas 7
Participantes 3