20260210 EjerColecciones_3_Comparator - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Vale, pues hemos podido generar el listado alfabético gracias a que nos hemos metido en alumno y hemos implementado comparable.
00:00:00
Pero claro, porque somos los dueños y señores de la aplicación.
00:00:15
Nos hemos metido ahí, ¡ay, que me interesa un alumno comparable! Lo pongo ahí con el compare tú.
00:00:21
Pero a ver, eso no siempre es tan fácil.
00:00:27
En una situación real, las clases del modelo son intocables, son Dios, porque representan mi lógica de negocio, están perfectamente conectadas con las tablas de la base de datos, tienen ahí sus explicaciones, sus cosas,
00:00:30
y yo no puedo llegar de repente
00:00:56
y porque a una funcionalidad en concreto
00:00:57
le interese algo irme a las clases
00:00:59
del modelo y adaptarlas a mis necesidades
00:01:01
que no se puede
00:01:04
poner en clase
00:01:05
bueno, pues en una situación normal
00:01:06
yo no puedo ir a las clases del modelo y hacer lo que me da la gana
00:01:11
¿vale?
00:01:13
entonces esto que hemos hecho de implements comparable está muy bien
00:01:14
pero no siempre podemos hacerlo
00:01:17
¿vale?
00:01:19
aparte de que puede darse una situación, a lo mejor yo si puedo
00:01:20
implementar un comparable
00:01:23
pero quiero hacer diferentes listados
00:01:24
uno por orden alfabético
00:01:27
ahora quiero otro por nota
00:01:29
ahora quiero otro por no sé qué
00:01:31
¿qué hago? ¿me vengo alumno todo el rato
00:01:32
a cambiarlo? no tiene sentido que tenga que
00:01:35
cambiar la aplicación y volver a ejecutarla
00:01:37
cada vez que quiero hacer un listado distinto
00:01:39
irme a cambiar el código, es absurdo
00:01:41
luego tiene que haber
00:01:43
alguna alternativa
00:01:44
para hacer criterios
00:01:46
de ordenación que ponerla
00:01:49
en la propia clase, tiene que haber alguna alternativa
00:01:50
porque esta, repito, es poco
00:01:53
cooperativa. Primero,
00:01:55
recopilando porque
00:01:58
me fuerza a un único criterio
00:01:59
de donación, solo uno, el que hay aquí.
00:02:01
A veces queremos más criterios,
00:02:03
más posibilidades.
00:02:05
Y segundo, porque puede que yo no pueda
00:02:07
tocar esta clase, con lo cual no puedo hacer
00:02:09
esto ni puedo hacer nada. Luego algún plan B
00:02:11
tiene que haber. Pues sí que lo hay.
00:02:13
Es el comparator ese
00:02:15
que copiasteis así sin ningún
00:02:17
criterio de echar GPT.
00:02:18
Y sin saberlo lo estaréis copiando.
00:02:20
Bueno, pues
00:02:24
hay una clase, una interfaz
00:02:25
que es la interfaz que no se llama
00:02:28
comparable, se llama comparator, que es otra
00:02:29
que esa es para crear
00:02:32
criterios de ordenación entre
00:02:34
cualesquiera dos tipos
00:02:36
de clases, eso es independiente
00:02:37
de la, no se mete en una clase
00:02:40
es independiente, yo creo
00:02:42
ese criterio de ordenación y luego
00:02:43
se lo paso al sort y ya está
00:02:45
con lo cual la
00:02:47
entidad no tiene por qué tener el comparable
00:02:49
no tiene por qué tenerlo
00:02:51
porque ya le voy a pasar
00:02:53
yo en el sort
00:02:55
el propio criterio, entonces vamos a hacerlo
00:02:56
en lugar de borrando este método
00:02:59
vamos a hacer otro que sea
00:03:01
ordenar por
00:03:03
orden ascendente de nota
00:03:05
por ejemplo, pues nos vamos
00:03:07
a hacer un
00:03:11
alumnos
00:03:12
nota
00:03:19
por nota descendente, venga
00:03:20
el que tenga más nota el primero
00:03:23
bueno, pues aquí tengo yo este problema
00:03:25
que yo querría esto
00:03:33
Esto es lo que yo quiero hacer
00:03:34
Quiero ordenar
00:03:37
Quiero ordenar
00:03:41
Y devolver esa lista ordenada
00:03:42
Pero que ocurre
00:03:44
Que el sort
00:03:47
Si yo no le paso a Kina ya sabemos de donde va a tirar
00:03:49
El sort va a tirar de este
00:03:52
Y este ordena por nombre
00:03:53
Guardad eso
00:03:55
De verdad eh
00:03:58
Sois peores que los que están en el despacho de dirección
00:04:00
es que hombre, los de patrocinio son los de la ESO
00:04:04
bueno, pues
00:04:14
son los de la básica
00:04:17
entonces el comparable de aquí no nos vale
00:04:18
y no tiene sentido que digamos, oye cuando vayas a ordenar por nota
00:04:23
para, cambia la aplicación
00:04:27
y vuelve a ejecutar, pues vaya, tengo que meter los álbumes otra vez
00:04:30
que tontería, o sea no tiene ningún sentido, entonces tengo que poder tener
00:04:33
más flexibilidad a la hora de dar criterios de ordenación
00:04:36
bueno, pues efectivamente para eso está este parámetro
00:04:38
este parámetro sirve para dar yo
00:04:41
un criterio de ordenación
00:04:43
concreto que va
00:04:45
a sobrescribir, que va a
00:04:47
hacer que sort ignore
00:04:49
el que tenga alumnos si es que tiene alguno
00:04:50
si es que tiene alguno
00:04:53
¿vale? luego recopilando
00:04:54
si yo al sort no le paso nada
00:04:56
o le paso un objeto null
00:04:59
o no pasarle nada no puedo, hay que pasarle un objeto al sort
00:05:00
pues si le paso un objeto null
00:05:03
entonces sort se va
00:05:05
alumno
00:05:07
y busca el comparable.
00:05:08
Si está estupendo, ordena por ese
00:05:11
y si no está es cuando me da error de ejecución.
00:05:13
Vale. Pero si yo
00:05:15
le paso un criterio de comparación
00:05:17
específico, entonces
00:05:19
ya ordena según ese criterio.
00:05:21
Ignorando el comparable
00:05:24
de alumno, ignorándolo completamente.
00:05:25
De hecho, si no lo hay,
00:05:28
no pasa nada, porque es que ni lo va a mirar.
00:05:29
Ni lo va a mirar, ¿vale? Si yo le paso
00:05:31
uno específico. Bueno, pues
00:05:33
¿cómo le pasamos un criterio específico?
00:05:35
Para pasar un criterio específico necesitamos un objeto de tipo comparator, que no comparable.
00:05:37
Es decir, necesito pasarle un objeto que sea de esa clase o que la implemente y que guarde el criterio de ordenación.
00:06:01
Pues es lo primero que vamos a hacer.
00:06:12
Vamos a hacernos la clase correspondiente
00:06:14
A ese criterio de ordenación
00:06:17
Pues venga
00:06:18
Me voy a hacer yo aquí en ejer 2
00:06:20
Una nueva clase
00:06:23
Nueva clase
00:06:24
Esta clase para que va a servir
00:06:26
Para el criterio
00:06:29
Nota
00:06:30
Criterio
00:06:31
Nota descendente
00:06:34
Descendente
00:06:36
Vale
00:06:39
Pues este es el objeto que yo voy a
00:06:43
instanciar aquí, new criterio nota descendente, es el criterio que yo voy a instanciar aquí,
00:06:45
pero claro, criterio nota descendente, este objeto tiene que ser un objeto, ser capaz
00:06:58
de ser un criterio de ordenación, ser capaz, tal y como lo tengo yo ahora mismo todavía
00:07:06
no es nada, pues para ser
00:07:10
criterio de ordenación tiene que implementar
00:07:12
una interfaz
00:07:15
que se llama comparator
00:07:17
tiene que implementar esa interfaz
00:07:19
que está en java útil
00:07:23
entonces
00:07:26
lo mismo, comparator es genérica
00:07:28
¿quiere yo un criterio de ordenación
00:07:30
para comparar cualquier cosa con cualquier cosa?
00:07:32
no, este criterio de ordenación
00:07:36
es para comparar alumnos entre sí
00:07:37
Pues entonces
00:07:39
Voy a
00:07:41
Parametrizar
00:07:43
Dar un valor
00:07:45
A la clase Header Comparator así
00:07:46
Vale, pues el compilador
00:07:49
Lógicamente me dice
00:07:54
Perdona, si quieres implementar esta interfaz
00:07:55
Tienes que sobreescribir
00:07:59
El método que tiene vacío
00:08:00
Si o si, si no lo puedes implementar algo
00:08:01
Si no sobreescribes el método que tiene vacío
00:08:04
O eso te vuelves abstracta, tú verás
00:08:05
No, hombre, yo quiero implementar el método
00:08:07
Venga, ponemos aquí a ver cuál es
00:08:10
Pues es este
00:08:12
¿Vale?
00:08:15
¿Veis? Este no es el compare
00:08:17
Este es otro
00:08:18
Porque esto es independiente de la clase alumno
00:08:19
Está fuera
00:08:22
Este es un criterio al que le pasas
00:08:22
Dos objetos alumno
00:08:26
Y te devuelve menos uno
00:08:27
Si este va antes
00:08:30
Cero si está en la misma posición
00:08:31
Según ese criterio
00:08:34
Y más uno si este va después
00:08:35
¿Vale?
00:08:37
Pues yo ahora ya lo programo para que funcione exactamente así.
00:08:40
¿Cómo quiero yo? Por orden descendente de nota.
00:08:43
Pues entonces esto que sea o2.nota menos o1.nota.
00:08:48
Como está afuera, con get, efectivamente.
00:09:03
¿Vale? Entonces, si el primero tiene la nota más baja,
00:09:16
me da positivo,
00:09:20
eso significa que va después.
00:09:22
Luego ese es el orden descendente de nota.
00:09:26
Van primero los de notas más altas.
00:09:29
Vale.
00:09:32
Uy, que me mato.
00:09:34
Pues esto es un criterio que va por libre.
00:09:35
Un criterio que va por libre.
00:09:37
Es un comparador.
00:09:38
Esto es un comparador entre alumnos.
00:09:39
Es un comparador.
00:09:41
Y podría haber muchos comparadores.
00:09:43
Criterio nombre más largo.
00:09:48
y yo aquí me haría el compare
00:09:50
para compararlos por el nombre
00:09:52
de mayor longitud y no alfabético
00:09:54
me haría los comparadores
00:09:56
que me dieran la gana
00:09:58
son comparadores
00:09:59
en este caso de alumnos
00:10:03
si yo quiero comparar profesores
00:10:05
pues me hago comparadores de profesor
00:10:08
y puedo aquí en el compare como lo comparo
00:10:10
son clases aparte
00:10:12
comparadores entre alumnos, comparadores entre profesores
00:10:14
vale pues
00:10:17
ahora este objeto comparador
00:10:20
es el que necesita
00:10:22
el método sort
00:10:24
entonces si yo al método sort le paso
00:10:25
un comparador, ya ignora
00:10:31
si alumno era comparable o no lo era
00:10:33
si no lo es, no pasa nada
00:10:36
si lo es, lo ignoro
00:10:37
porque la comparación entre alumnos
00:10:38
la voy a hacer según este comparador
00:10:41
la voy a hacer según este
00:10:43
¿vale?
00:10:44
y ahora ya
00:11:06
si añadimos en el main
00:11:07
ese caso
00:11:08
para probarlo
00:11:11
bueno, este de aquí
00:11:12
mostrar alumnos
00:11:19
por nota
00:11:24
descendente
00:11:27
vale
00:11:30
nos hacemos el caso
00:11:33
8
00:11:35
el caso 8 que va a ser
00:11:36
igual que el 6
00:11:46
cambiando el método al que llamamos
00:11:48
entonces me voy a copiar el 6
00:11:50
me voy a copiar
00:11:51
el 6 que es este
00:11:54
caso 6
00:11:56
me lo pongo aquí debajo
00:12:01
este sería el caso 8
00:12:03
caso 8
00:12:07
NIF del profesor
00:12:09
si ese profesor
00:12:11
existe, recupérame el
00:12:13
profe y llama
00:12:15
al método este otro
00:12:17
llamas
00:12:19
a este
00:12:21
que era
00:12:22
no le puse el
00:12:25
¿Cómo se llamaba?
00:12:35
Alumnos
00:12:43
A ver, ¿por qué no me aparece aquí?
00:12:43
Profesor
00:12:50
Ah, porque está public
00:12:51
Está private, perdón
00:12:53
Vale
00:12:56
Por eso no me aparecía
00:12:57
Vale, pues entonces
00:12:59
Ahora ya sí me va a aparecer
00:13:03
Punto
00:13:04
Alumnos, nota descendente
00:13:08
Vale
00:13:15
Vale, pues ya está
00:13:15
Vamos a ver si nos lo hace y paramos
00:13:23
Vamos a ver solo si nos lo hace
00:13:29
En la consola teníamos este
00:13:32
Nuevo profe
00:13:36
1, 2, 3 y 4
00:13:45
Nombre del profesor
00:13:47
Agregar alumno
00:13:49
Vamos a agregar primero al de menor nota
00:13:51
Para que lo recoloque
00:13:54
¿Vale?
00:13:56
Este tiene la menor nota, el 4
00:13:58
Y ahora
00:14:00
¿A qué profe?
00:14:05
1, 2, 3 y 4
00:14:06
Venga, agregamos
00:14:08
2, 2, 2, 2
00:14:10
Este tiene
00:14:12
Nombre del alumno
00:14:13
Juan, vale
00:14:15
1, 2, 3 y 4
00:14:17
Ah, vale, es que no les ponemos nota
00:14:19
Aquí hay que ponerla después
00:14:22
Poner nota a un alumno, vale, vale
00:14:23
Venga, vamos a ponerle nota
00:14:25
Ni del alumno era 1, 1, 1, 2, 2, 2
00:14:27
¿No? Pues al 1, 1
00:14:30
1, 1, 1, le vamos a evaluar poniéndole
00:14:32
del profesor 1, 2, 3, 4
00:14:34
vamos a evaluar poniendo un 0
00:14:36
0 ya
00:14:38
¿Cómo?
00:14:40
Ah, bueno, pues le hemos puesto un 0
00:14:42
Y ahora
00:14:43
poner nota al
00:14:45
segundo, le vamos a poner una nota más alta para que
00:14:48
lo cambie de orden
00:14:50
Queremos evaluar al 2, 2, 2, 2
00:14:51
Nib del profesor que lo tiene
00:14:54
este, nota que le vamos a
00:14:56
poner un 5
00:14:58
Vale
00:14:59
Y ahora
00:15:01
Elegimos la opción
00:15:03
7
00:15:07
Nib de la
00:15:08
Uy, no, 7 no
00:15:10
Bueno, si pongo
00:15:12
1 que no es, no lo encuentra y ya está, ¿no?
00:15:15
Vale
00:15:19
No se ha encontrado, vale
00:15:19
8
00:15:22
Alumnos por nota descendente
00:15:23
¿De quién? De 1, 2, 3 y 4
00:15:27
Efectivamente los ha reordenado
00:15:29
Ha puesto primero el del 5 y luego el del 0
00:15:33
Los ha reordenado aunque los habíamos insertado en el otro orden
00:15:35
¿Vale?
00:15:38
Venga, pues ahora sí que paramos
00:15:41
Paramos y luego seguís haciendo ejercicios
00:15:43
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 1
- Fecha:
- 10 de febrero de 2026 - 13:53
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 15′ 49″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 65.26 MBytes