cami-la / curso-dio-intro-collections

Resolução dos exercícios propostos: CURSO INTRODUTÓRIO COLLECTIONS FRAMEWORK JAVA.
https://web.digitalinnovation.one/home
602 stars 210 forks source link

Dúvida sobre Comparable e Comparator em List #18

Open karenbiblio opened 2 years ago

karenbiblio commented 2 years ago

Olá Camila, tudo bem? Obrigada pelas aulas ❤️

Na aula de Lists - Ordenação de elementos em uma coleção List - exemplos dos Gatos:

Você criou um "Comparable Nome" e depois criou "Comparator para Cor e Idade". Você dizia na aula que: "como criou um Comparable para Nome, para os outros tinha que ser Comparator". Significa que, só pode haver 1 Comparable enquanto pode haver vários Comparators num mesmo programa?

Agradeço

cami-la commented 2 years ago

Oi, Karen. Tudo bem? (: Primeiramente muito obrigada pelo feedback. Fico muito feliz em saber que você está gostando das aulas, <3 Isso 1 Comparable e diversos Comparators para uma classe.

O Comparable permite que você determine uma regra de comparação para a classe que implementar essa interface, como uma espécie de regra padrão ou regra oficial. Vamos ver os exemplos abaixo, com as classes String e Integer. Essas classes que usamos todos os dias e já são do próprio Java:

E nós temos a nossa classe Gato e queremos dizer que por padrão, quando precisamos comparar objetos do tipo Gato, fazemos isso pelo atributo nome (poderia ser por qualquer outro atributo). Para isso, basta implementar a interface Comparable e sobreescrever o método compareTo e criar a regra de comparação:

2022-07-19_15-40

Mas vamos supor que eu queira sair dessa "regra padrão". Além de comparar por nome, quero comparar de outras formas, mas quero deixar o nome como padrão e eventualmente escolher outras regras. Aí, criamos nossas prórias classes comparadoras, que vão extender a classe Comparator fazendo cada uma a sua própria regra.

2022-07-19_15-43

Ficou mais claro agora?

Mais deixa eu te contar uma coisa boa: No final desse curso, vamos conhecer as Streams API. Essa API tem uma forma super fácil de fazer essas comparações sem precisar criar classes várias para isso. Porém é importante você ter esses conceitos de Comparator X Comparable na ponta da língua que vai te ajudar bastante quando chegarmos lá!

Se ainda não ficou claro, pode falar que vamos resolvendo juntas. (: