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 é só 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…
você pode fazer a busca de dados com essas condições, acredito que será uma boa pedida dessa forma.
Vc
Quer dizer
No banco ???
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.
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 ???
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!!
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;
}
}
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!!