1 00:00:00,050 --> 00:00:05,389 Ven a nuestro restaurante, los métodos que empezaban aquí. 2 00:00:07,309 --> 00:00:12,169 Este nada, no tiene ninguna duda ni nada que comentar, ¿verdad? 3 00:00:13,230 --> 00:00:18,070 Añadir un plato a la carta, escoger la colección y añadírselo, ya está. 4 00:00:19,190 --> 00:00:21,929 Aquí no hay nada raro que pueda salir, en principio nada. 5 00:00:21,929 --> 00:00:25,850 Ver carta 6 00:00:25,850 --> 00:00:28,710 Ver carta tampoco tiene nada raro 7 00:00:28,710 --> 00:00:30,429 Es recorrer la colección 8 00:00:30,429 --> 00:00:34,149 Ya sabemos recorrer una colección 9 00:00:34,149 --> 00:00:36,450 Tanto con un for de índice 10 00:00:36,450 --> 00:00:37,469 Como con un for each 11 00:00:37,469 --> 00:00:40,210 Cualquiera de las dos nos vale para recorrer una colección 12 00:00:40,210 --> 00:00:42,710 Aquí por comodidad 13 00:00:42,710 --> 00:00:43,929 A la hora de escribirlo 14 00:00:43,929 --> 00:00:46,229 Con un for each normal 15 00:00:46,229 --> 00:00:47,990 Para cada plato 16 00:00:47,990 --> 00:00:49,429 Con catenamen el resultado 17 00:00:49,429 --> 00:00:50,130 Su nombre 18 00:00:50,130 --> 00:00:52,490 tabulación para que quede más bonito 19 00:00:52,490 --> 00:00:54,929 y el precio, ¿vale? Así me queda más bonita 20 00:00:54,929 --> 00:00:55,329 la carta 21 00:00:55,329 --> 00:00:58,850 no me he complicado, podría aquí también 22 00:00:58,850 --> 00:01:00,670 añadir la lista de ingredientes, pero bueno 23 00:01:00,670 --> 00:01:02,170 ver carta que sea plato y precio 24 00:01:02,170 --> 00:01:04,930 si luego uno quiere detalles del plato, ya que pulse 25 00:01:04,930 --> 00:01:07,010 a ver ingredientes de un plato 26 00:01:07,010 --> 00:01:09,530 vale 27 00:01:09,530 --> 00:01:11,069 aquí 28 00:01:11,069 --> 00:01:14,189 cuando he puesto hacerlo, he visto que yo 29 00:01:14,189 --> 00:01:15,609 aquí había puesto stream, ¿verdad? 30 00:01:16,950 --> 00:01:18,030 y para devolver 31 00:01:18,030 --> 00:01:20,430 los platos que tiene un ingrediente 32 00:01:20,430 --> 00:01:22,150 son muchos en principio 33 00:01:22,150 --> 00:01:24,069 con lo cual este método sería un list 34 00:01:24,069 --> 00:01:25,230 lo que debería devolver, ¿verdad? 35 00:01:25,290 --> 00:01:26,810 imagino que os habréis dado cuenta al hacerlo 36 00:01:26,810 --> 00:01:28,189 ¿vale? 37 00:01:28,930 --> 00:01:31,269 entonces, este método 38 00:01:31,269 --> 00:01:34,170 devuelve en principio los nombres 39 00:01:34,170 --> 00:01:36,230 de los platos que contiene el ingrediente 40 00:01:36,230 --> 00:01:37,950 también muy fácil de hacer 41 00:01:37,950 --> 00:01:40,090 porque tenemos el método 42 00:01:40,090 --> 00:01:41,049 adecuado para eso 43 00:01:41,049 --> 00:01:44,129 tenemos que recorrer nuestra carta 44 00:01:44,129 --> 00:01:45,950 el resultado 45 00:01:45,950 --> 00:01:48,109 del método, ¿cuál va a ser? 46 00:01:48,109 --> 00:01:49,450 una lista de cosas 47 00:01:49,450 --> 00:01:51,950 Pues yo aquí preparo mi lista vacía 48 00:01:51,950 --> 00:01:54,310 Esta como veis 49 00:01:54,310 --> 00:01:55,709 Es una lista pensada 50 00:01:55,709 --> 00:01:58,349 Solo para añadir 51 00:01:58,349 --> 00:01:59,629 Con lo cual bueno 52 00:01:59,629 --> 00:02:00,590 Me hago un linked list 53 00:02:00,590 --> 00:02:03,109 Que es mucho más cómodo 54 00:02:03,109 --> 00:02:04,590 Hacer los ads en un linked list 55 00:02:04,590 --> 00:02:06,569 Vale pues recorro mi carta 56 00:02:06,569 --> 00:02:08,550 Para cada plato 57 00:02:08,550 --> 00:02:11,229 Si contiene el ingrediente que me han dicho 58 00:02:11,229 --> 00:02:12,289 Si lo contiene 59 00:02:12,289 --> 00:02:15,050 Añado el nombre de ese plato 60 00:02:15,050 --> 00:02:16,569 Al list y ya está 61 00:02:16,569 --> 00:02:18,849 ¿vale? podría devolver 62 00:02:18,849 --> 00:02:20,349 una lista de platos directamente 63 00:02:20,349 --> 00:02:22,610 con lo cual aquí añadiría el plato 64 00:02:22,610 --> 00:02:24,650 tal cual, pero bueno lo hemos 65 00:02:24,650 --> 00:02:26,610 hecho para que te devuelvan los 66 00:02:26,610 --> 00:02:28,590 nombres solamente, oye dime 67 00:02:28,590 --> 00:02:30,750 ¿qué es lo que tiene aceite? 68 00:02:31,830 --> 00:02:32,449 pues tú 69 00:02:32,449 --> 00:02:34,229 pinchas aceite y te sale 70 00:02:34,229 --> 00:02:36,909 aceite tiene sopa, carne, macarrones 71 00:02:36,909 --> 00:02:38,090 los nombres 72 00:02:38,090 --> 00:02:40,449 ¿vale? este 73 00:02:40,449 --> 00:02:42,430 no tiene nada, raro tampoco ¿verdad? 74 00:02:43,750 --> 00:02:44,530 no tiene nada 75 00:02:44,530 --> 00:02:49,039 extraño 76 00:02:49,039 --> 00:03:07,840 vale, siguiente 77 00:03:07,840 --> 00:03:13,620 eliminar plato 78 00:03:13,620 --> 00:03:15,539 que es 79 00:03:15,539 --> 00:03:17,280 eliminar un plato que se llama 80 00:03:17,280 --> 00:03:18,020 como me han dicho 81 00:03:18,020 --> 00:03:20,379 elimina los macarrones 82 00:03:20,379 --> 00:03:22,400 elimina las lentejas de la carta 83 00:03:22,400 --> 00:03:25,180 elimina el plato que se llame carne 84 00:03:25,180 --> 00:03:26,699 nos hemos hecho vegetarianos 85 00:03:26,699 --> 00:03:28,879 elimina un plato con un nombre 86 00:03:28,879 --> 00:03:31,280 bueno, pues este es el que más me interesa 87 00:03:31,280 --> 00:03:33,020 ¿qué es lo que uno haría 88 00:03:33,020 --> 00:03:35,199 con lo que nosotros en principio sabemos? 89 00:03:36,539 --> 00:03:37,560 bueno, sabemos que tenemos 90 00:03:37,560 --> 00:03:38,460 un método remove 91 00:03:38,460 --> 00:03:41,759 que nos permite eliminar un plato 92 00:03:41,759 --> 00:03:43,099 si yo le doy un plato 93 00:03:43,099 --> 00:03:43,919 lógicamente 94 00:03:43,919 --> 00:03:47,080 bueno, pues entonces 95 00:03:47,080 --> 00:03:49,159 pero tengo que encontrar qué plato eliminar 96 00:03:49,159 --> 00:03:50,939 si a mí me dicen directamente 97 00:03:50,939 --> 00:03:53,060 elimina el objeto plato y me pasan aquí 98 00:03:53,060 --> 00:03:54,580 el plato tal cual 99 00:03:54,580 --> 00:03:56,379 pues entonces 100 00:03:56,379 --> 00:03:58,759 yo puedo directamente hacer 101 00:03:58,759 --> 00:04:00,900 carta.remove, le paso el plato 102 00:04:00,900 --> 00:04:02,900 y me elimina de la colección 103 00:04:02,900 --> 00:04:04,180 el primer plato que encuentra igual 104 00:04:04,180 --> 00:04:06,719 aquí no me han pasado 105 00:04:06,719 --> 00:04:08,960 el objeto plato entero, sino me han pasado 106 00:04:08,960 --> 00:04:10,840 uno de sus 107 00:04:10,840 --> 00:04:12,599 campos, su clave primaria 108 00:04:12,599 --> 00:04:15,020 bueno, pues entonces 109 00:04:15,020 --> 00:04:16,379 nos plantearíamos 110 00:04:16,379 --> 00:04:18,100 una búsqueda 111 00:04:18,100 --> 00:04:20,360 vamos a buscar en la carta 112 00:04:20,360 --> 00:04:22,639 hasta que encontremos el que 113 00:04:22,639 --> 00:04:24,899 cumple la condición de llamarse 114 00:04:24,899 --> 00:04:27,079 igual que esto, vamos a buscar en la carta 115 00:04:27,079 --> 00:04:28,379 pues venga 116 00:04:28,379 --> 00:04:29,800 recorremos la carta 117 00:04:29,800 --> 00:04:31,420 y uno podría hacer 118 00:04:31,420 --> 00:04:32,379 con lo que hemos visto 119 00:04:32,379 --> 00:04:34,000 vale 120 00:04:34,000 --> 00:04:35,920 cuando ya hemos encontrado 121 00:04:35,920 --> 00:04:37,620 el plato 122 00:04:37,620 --> 00:04:38,379 que cumple 123 00:04:38,379 --> 00:04:39,740 llamarse como este 124 00:04:39,740 --> 00:04:40,800 ese objeto 125 00:04:40,800 --> 00:04:41,279 plato 126 00:04:41,279 --> 00:04:42,839 remove carta 127 00:04:42,839 --> 00:04:43,980 ya sabemos 128 00:04:43,980 --> 00:04:44,379 que entonces 129 00:04:44,379 --> 00:04:44,860 ese plato 130 00:04:44,860 --> 00:04:45,459 se eliminará 131 00:04:45,459 --> 00:04:47,639 y aquí ya avisamos 132 00:04:47,639 --> 00:04:49,480 de que lo hemos encontrado 133 00:04:49,480 --> 00:04:50,480 de que result true 134 00:04:50,480 --> 00:04:51,740 para 135 00:04:51,740 --> 00:04:53,500 para 136 00:04:53,500 --> 00:04:54,519 devolver 137 00:04:54,519 --> 00:04:55,620 un valor de control 138 00:04:55,620 --> 00:04:56,420 al que nos llama 139 00:04:56,420 --> 00:04:57,800 que el que nos llama 140 00:04:57,800 --> 00:04:58,240 sepa 141 00:04:58,240 --> 00:05:00,259 si realmente ese plato existía 142 00:05:00,259 --> 00:05:02,220 o no se eliminó ninguno 143 00:05:02,220 --> 00:05:04,279 ¿vale? al menos tienen un 144 00:05:04,279 --> 00:05:06,180 valor de rock control, una realimentación 145 00:05:06,180 --> 00:05:07,680 porque igual escribió mal el nombre 146 00:05:07,680 --> 00:05:09,860 y no está borrando el plato 147 00:05:09,860 --> 00:05:12,060 correspondiente, o sea, eso sí que es importante 148 00:05:12,060 --> 00:05:14,459 tú pones, elimina macarrones 149 00:05:14,459 --> 00:05:16,300 y has puesto macarrones con una R 150 00:05:16,300 --> 00:05:18,339 si la aplicación no te dice 151 00:05:18,339 --> 00:05:20,139 nada y el método no te dice nada, te vas tan 152 00:05:20,139 --> 00:05:22,160 tranquilo pensando que ha quitado 153 00:05:22,160 --> 00:05:24,339 los macarrones de la carta, pero no, los macarrones 154 00:05:24,339 --> 00:05:26,199 siguen ahí, porque tú le has 155 00:05:26,199 --> 00:05:28,100 pasado macarrones con una R solo 156 00:05:28,100 --> 00:05:30,759 con lo cual él no ha borrado nada 157 00:05:30,759 --> 00:05:32,399 eso 158 00:05:32,399 --> 00:05:34,540 es una situación típica que induce un montón 159 00:05:34,540 --> 00:05:36,579 de errores, si uno no realimenta hacia arriba 160 00:05:36,579 --> 00:05:38,459 la parte 161 00:05:38,459 --> 00:05:40,000 de la aplicación que ya no es el método 162 00:05:40,000 --> 00:05:42,680 pues se cree que realmente has eliminado los macarrones 163 00:05:42,680 --> 00:05:43,939 y no, no has eliminado nada 164 00:05:43,939 --> 00:05:46,779 entonces este boolean aquí sí que es interesante 165 00:05:46,779 --> 00:05:48,180 porque el que llama al método 166 00:05:48,180 --> 00:05:50,660 tiene manera de saber si ha eliminado realmente 167 00:05:50,660 --> 00:05:51,500 no se ha eliminado 168 00:05:51,500 --> 00:05:54,220 no se ha eliminado porque es que lo he escrito mal 169 00:05:54,220 --> 00:05:55,860 o que pasa, o la carta 170 00:05:55,860 --> 00:05:57,800 es que esta no es la carta 171 00:05:57,800 --> 00:05:59,620 que yo quiero. Bueno, ya te permite 172 00:05:59,620 --> 00:06:01,980 indagar un poco más de lo que ha pasado. 173 00:06:02,800 --> 00:06:03,759 Bueno, pues en principio uno 174 00:06:03,759 --> 00:06:05,699 podría plantearse que lo que sabemos hacer es esto, ¿verdad? 175 00:06:06,920 --> 00:06:07,319 Entonces, 176 00:06:07,759 --> 00:06:09,920 si vosotros habéis hecho esto 177 00:06:09,920 --> 00:06:12,000 sin más, y luego 178 00:06:12,000 --> 00:06:13,660 vamos a hacer un main para probar esto. 179 00:06:14,180 --> 00:06:15,980 ¿Vale? Porque estos dos métodos ahora mismo 180 00:06:15,980 --> 00:06:17,399 están así. Vamos a hacer un main. 181 00:06:17,740 --> 00:06:19,860 Entonces, aquí efectivamente... 182 00:06:20,439 --> 00:06:21,660 Sí, por estos dos. 183 00:06:21,779 --> 00:06:22,779 Estamos probando este. 184 00:06:29,540 --> 00:06:33,220 Sí, podrías hacer un retun, el retun remove, ¿vale? 185 00:06:33,300 --> 00:06:35,639 Sí, lo único es que no lo he hecho así, pues yo que sé, 186 00:06:35,720 --> 00:06:38,000 para que quede el código un poco más estructurado, ¿vale? 187 00:06:38,040 --> 00:06:40,819 No poner un retun aquí mismo, ¿vale? 188 00:06:41,360 --> 00:06:43,480 No sé si te refieres a eso, ¿vale? 189 00:06:43,540 --> 00:06:46,480 Entonces, si pongo yo aquí el retun, ya está, retun true. 190 00:06:46,480 --> 00:06:50,000 Y si no sale por aquí, es por que no aparezca en retun, 191 00:06:50,560 --> 00:06:52,720 por lo que hablábamos de un código estructurado, 192 00:06:52,800 --> 00:06:54,319 que no tenga varios puntos de salida, 193 00:06:54,879 --> 00:06:57,560 que un código salga siempre por el mismo punto. 194 00:06:57,560 --> 00:07:00,800 Es decir, cuando proliferan los return 195 00:07:00,800 --> 00:07:01,540 En un código 196 00:07:01,540 --> 00:07:05,100 Pues ya empieza a escamar un poco 197 00:07:05,100 --> 00:07:07,339 Pero bueno, tampoco hay que ser demasiado estrictos 198 00:07:07,339 --> 00:07:08,319 Con eso, ¿vale? 199 00:07:10,139 --> 00:07:11,180 Vale, entonces 200 00:07:11,180 --> 00:07:13,060 Ahora en un main, pues yo me he creado aquí 201 00:07:13,060 --> 00:07:14,399 Un restaurante y lógicamente 202 00:07:14,399 --> 00:07:17,060 Idiota no soy, entonces le he dicho a esa GPT 203 00:07:17,060 --> 00:07:18,779 Dame una línea para rellenar 204 00:07:18,779 --> 00:07:19,600 Un restaurante 205 00:07:19,600 --> 00:07:22,079 Y me ha dado esto 206 00:07:22,079 --> 00:07:24,959 ¿Vale? Bueno, pues ahora ya sí que podemos 207 00:07:24,959 --> 00:07:26,079 Probar nuestros métodos 208 00:07:26,079 --> 00:07:28,379 vale, entonces voy a asegurarme 209 00:07:28,379 --> 00:07:28,879 de que sí 210 00:07:28,879 --> 00:07:31,060 entonces 211 00:07:31,060 --> 00:07:34,000 pedís el hgpt 212 00:07:34,000 --> 00:07:36,699 a ver 213 00:07:36,699 --> 00:07:37,800 lo que yo le he hecho es 214 00:07:37,800 --> 00:07:40,459 le he copiado y pegado solamente 215 00:07:40,459 --> 00:07:41,660 estas líneas de aquí 216 00:07:41,660 --> 00:07:44,920 no la clase entera, esto para que vea la estructura 217 00:07:44,920 --> 00:07:46,680 le he copiado esto 218 00:07:46,680 --> 00:07:48,560 para que vea la estructura y le he copiado 219 00:07:48,560 --> 00:07:51,519 esto y esto 220 00:07:51,519 --> 00:07:53,759 y le he dicho dame unas líneas 221 00:07:53,759 --> 00:07:55,600 para rellenar un restaurante con datos 222 00:07:55,600 --> 00:07:57,000 cualesquiera al azar 223 00:07:57,000 --> 00:08:00,860 Vale, esto es lo que le he dicho 224 00:08:00,860 --> 00:08:02,579 Le he pegado estas dos cositas 225 00:08:02,579 --> 00:08:05,060 O sea, es que él se enrolla 226 00:08:05,060 --> 00:08:07,480 Y le he dicho 227 00:08:07,480 --> 00:08:09,939 Quiero líneas de código para crear un restaurante 228 00:08:09,939 --> 00:08:11,040 Con platos e ingredientes 229 00:08:11,040 --> 00:08:13,779 Vale, solo quiero eso, no te enrolles tanto 230 00:08:13,779 --> 00:08:15,540 Y ya está, y me ha dado eso 231 00:08:15,540 --> 00:08:16,860 Vale 232 00:08:16,860 --> 00:08:26,500 Nuestro mail 233 00:08:26,500 --> 00:08:28,579 Bueno, los tenéis ya, la pizza 234 00:08:28,579 --> 00:08:31,600 Imagino que os habrá dado otros nombres 235 00:08:31,600 --> 00:08:32,940 ¿Verdad? Y otros ingredientes 236 00:08:32,940 --> 00:08:34,399 Y otros platos 237 00:08:34,399 --> 00:08:37,590 ¿Cómo se llama el tuyo? 238 00:08:37,690 --> 00:08:38,350 Tú no se lo has pedido 239 00:08:38,350 --> 00:08:40,509 Lo has hecho a mano 240 00:08:40,509 --> 00:08:41,629 Muy bien 241 00:08:41,629 --> 00:08:49,340 Bueno 242 00:08:49,340 --> 00:08:52,740 Pues nada, ya tenemos nuestro restaurante 243 00:08:52,740 --> 00:08:54,200 La buena mesa 244 00:08:54,200 --> 00:08:55,559 El vuestro, pues el que sea 245 00:08:55,559 --> 00:08:57,960 Nuestro super restaurante 246 00:08:57,960 --> 00:09:01,120 Ahora 247 00:09:01,120 --> 00:09:05,120 Voy a ver la carta que tiene 248 00:09:05,120 --> 00:09:06,340 Vale 249 00:09:06,340 --> 00:09:08,919 Espera, primero voy a 250 00:09:08,919 --> 00:09:12,779 probar a ver si está todo bien, voy a ver la carta que tiene 251 00:09:12,779 --> 00:09:16,179 ahora mismo solamente vamos a probar 252 00:09:16,179 --> 00:09:17,379 por ejemplo, ver carta 253 00:09:17,379 --> 00:09:21,700 vale, porque añadir plato ya me lo ha hecho 254 00:09:21,700 --> 00:09:24,200 y añadir ingredientes al plato ya me ha hecho todo eso 255 00:09:24,200 --> 00:09:27,980 vale, a ver, como no le he dado los nombres 256 00:09:27,980 --> 00:09:30,379 de los métodos, él me puso en origen agregar 257 00:09:30,379 --> 00:09:32,460 pero yo lo he cambiado a add y ya está 258 00:09:32,460 --> 00:09:43,370 bueno, estamos situados 259 00:09:43,370 --> 00:09:49,490 venga, vamos a ver la carta de este restaurante 260 00:09:49,490 --> 00:09:51,850 Pues ya está 261 00:09:51,850 --> 00:09:53,730 Pizza, ensalada 262 00:09:53,730 --> 00:09:55,830 Uy, que carta más fea, le voy a poner un barra N 263 00:09:55,830 --> 00:09:57,389 Un salto de línea 264 00:09:57,389 --> 00:10:01,090 Para que quede más bonito 265 00:10:01,090 --> 00:10:06,720 Vale, pues aquí 266 00:10:06,720 --> 00:10:09,220 Este editor va a necesitar 267 00:10:09,220 --> 00:10:10,220 Barra R, será 268 00:10:10,220 --> 00:10:14,879 Vamos a ver 269 00:10:14,879 --> 00:10:18,500 Ah, no, perdón, que el ver carta irá en 270 00:10:18,500 --> 00:10:19,259 Ay 271 00:10:19,259 --> 00:10:24,009 Vale 272 00:10:24,009 --> 00:10:28,879 A ver, el método ver carta 273 00:10:29,480 --> 00:10:31,259 No me está haciendo el salto de línea 274 00:10:31,259 --> 00:10:32,279 ¿Dónde está ver carta? 275 00:10:32,279 --> 00:10:34,240 Ah, claro, me falta el salto de línea que al final 276 00:10:34,240 --> 00:10:37,190 Vale 277 00:10:37,190 --> 00:10:40,889 Vamos a ver ahora la carta 278 00:10:40,889 --> 00:10:42,610 Vale, ya queda más bonita 279 00:10:42,610 --> 00:10:44,129 Venga 280 00:10:44,129 --> 00:10:48,220 ¡Hala! Pues venga 281 00:10:48,220 --> 00:10:51,500 Tenemos más métodos para probar por aquí 282 00:10:51,500 --> 00:10:55,779 Vamos a ver los platos que tienen un ingrediente 283 00:10:55,779 --> 00:10:57,100 A ver 284 00:10:57,100 --> 00:10:58,600 Venga 285 00:10:58,600 --> 00:11:04,750 Entonces 286 00:11:04,750 --> 00:11:07,649 De mi restaurante tiene 287 00:11:07,649 --> 00:11:11,559 Un método que era 288 00:11:11,559 --> 00:11:13,440 platos que tienen un ingrediente 289 00:11:13,440 --> 00:11:15,820 que es una lista directamente 290 00:11:15,820 --> 00:11:17,720 ¿qué ingrediente? voy a ver los platos 291 00:11:17,720 --> 00:11:18,360 que tienen 292 00:11:18,360 --> 00:11:19,980 queso 293 00:11:19,980 --> 00:11:23,639 ¿vale? entonces como 294 00:11:23,639 --> 00:11:25,799 veis le estoy pasando 295 00:11:25,799 --> 00:11:27,700 al system out directamente 296 00:11:27,700 --> 00:11:28,980 una lista, un list 297 00:11:28,980 --> 00:11:31,519 porque platos con ingrediente 298 00:11:31,519 --> 00:11:33,159 me devuelve un list de string 299 00:11:33,159 --> 00:11:35,659 entonces system out 300 00:11:35,659 --> 00:11:37,340 ya sabemos lo que hace por dentro, le pasas algo 301 00:11:37,340 --> 00:11:39,580 que no sea una cadena y te llama 302 00:11:39,580 --> 00:11:41,419 el método toString de ese algo 303 00:11:41,419 --> 00:11:42,600 para convertirlo a cadena 304 00:11:42,600 --> 00:11:45,179 ¿cómo es el método toStringDeList? 305 00:11:45,500 --> 00:11:47,159 ni idea, vamos a probar a ver si es bonito 306 00:11:47,159 --> 00:11:48,200 o me saca ahí una caca 307 00:11:48,200 --> 00:11:50,379 porque si es bonito, pues ya está 308 00:11:50,379 --> 00:11:53,059 no tenemos que modificar nosotros 309 00:11:53,059 --> 00:11:55,139 el método platos con ingredientes 310 00:11:55,139 --> 00:11:57,100 vale, entonces 311 00:11:57,100 --> 00:11:58,919 vamos a ver los platos que tienen 312 00:11:58,919 --> 00:12:03,750 que eso, pues el 313 00:12:03,750 --> 00:12:05,549 toStringDeList 314 00:12:05,549 --> 00:12:06,970 este es bonito 315 00:12:06,970 --> 00:12:09,889 vale, me saca 316 00:12:09,889 --> 00:12:11,769 todos los elementos así 317 00:12:11,769 --> 00:12:13,149 pero a ver 318 00:12:13,149 --> 00:12:17,240 este es 319 00:12:17,240 --> 00:12:20,700 bonito 320 00:12:20,700 --> 00:12:22,860 de casualidad 321 00:12:22,860 --> 00:12:24,779 o sea, no es que sea bonito de casualidad, perdón 322 00:12:24,779 --> 00:12:27,500 este es bonito porque lo que me devuelve 323 00:12:27,500 --> 00:12:29,000 platos con ingrediente 324 00:12:29,000 --> 00:12:31,080 es un list de string 325 00:12:31,080 --> 00:12:33,539 entonces, ¿qué me 326 00:12:33,539 --> 00:12:35,419 devuelve tu 327 00:12:35,419 --> 00:12:36,320 string de list? 328 00:12:36,919 --> 00:12:38,980 pues me devuelve entre corchetes 329 00:12:38,980 --> 00:12:41,840 me devuelve entre corchetes 330 00:12:41,840 --> 00:12:43,279 los objetos 331 00:12:43,279 --> 00:12:45,139 de la lista, en este caso eran string 332 00:12:45,139 --> 00:12:47,580 pues el toString 333 00:12:47,580 --> 00:12:49,440 de pizza, que es un 334 00:12:49,440 --> 00:12:51,620 string de pizza, pero si yo le hubiera pasado 335 00:12:51,620 --> 00:12:53,460 platos, es decir 336 00:12:53,460 --> 00:12:55,759 si mi método platos con ingredientes 337 00:12:55,759 --> 00:12:57,740 si mi método platos 338 00:12:57,740 --> 00:12:59,379 con ingredientes de aquí me hubiera devuelto 339 00:12:59,379 --> 00:13:01,799 el objeto plato enterito 340 00:13:01,799 --> 00:13:03,519 eso 341 00:13:03,519 --> 00:13:05,440 me habría salido un list muy feo 342 00:13:05,440 --> 00:13:07,379 y muy horrible, porque me habría mostrado 343 00:13:07,379 --> 00:13:09,379 el toString 344 00:13:09,379 --> 00:13:11,480 de cada plato, si yo no lo 345 00:13:11,480 --> 00:13:13,419 tengo implementado, pues vete a saber lo que 346 00:13:13,419 --> 00:13:15,220 sale. ¿Vale? 347 00:13:15,360 --> 00:13:16,980 ¿Lo tenemos claro a lo que nos referimos? 348 00:13:18,559 --> 00:13:19,840 Bueno, pues entonces 349 00:13:19,840 --> 00:13:23,759 plato... Vale, ahora vamos a 350 00:13:23,759 --> 00:13:27,049 eliminar 351 00:13:27,049 --> 00:13:28,870 un plato por su nombre 352 00:13:28,870 --> 00:13:35,460 con el método que hemos 353 00:13:35,460 --> 00:13:37,240 hecho. R punto 354 00:13:37,240 --> 00:13:39,600 eliminar plato. Vale. 355 00:13:40,100 --> 00:13:41,620 Voy a eliminar la hamburguesa. 356 00:13:41,620 --> 00:13:42,639 Tengo tres platos. 357 00:13:52,620 --> 00:13:53,759 Y me sale este error. 358 00:13:54,960 --> 00:13:56,620 Un error que no nos había salido en la vida. 359 00:13:57,519 --> 00:13:58,820 Y esto, a ver, voy a probar otra vez. 360 00:13:58,820 --> 00:13:59,500 No la hayamos liado 361 00:13:59,500 --> 00:14:02,360 Voy a eliminar la ensalada 362 00:14:02,360 --> 00:14:08,679 Y luego voy a ver la carta otra vez 363 00:14:08,679 --> 00:14:11,200 Porque tendría que haber puesto aquí 364 00:14:11,200 --> 00:14:12,620 Ver carta después para 365 00:14:12,620 --> 00:14:17,919 Venga, vamos a eliminar 366 00:14:17,919 --> 00:14:20,559 Uy, eliminar plato ensalada 367 00:14:20,559 --> 00:14:22,440 Venga, aquí ya lo tenéis puesto 368 00:14:22,440 --> 00:14:25,899 Pues este sí 369 00:14:25,899 --> 00:14:28,980 Y es un elemento más 370 00:14:28,980 --> 00:14:29,879 Ensalada 371 00:14:29,879 --> 00:14:31,179 Voy a eliminar a la pizza 372 00:14:31,179 --> 00:14:41,620 Pues aquí me vuelve a salir el error raro 373 00:14:41,620 --> 00:14:43,970 ¿Vale? 374 00:14:43,970 --> 00:14:46,610 Vamos a meter otro ingrediente más 375 00:14:46,610 --> 00:14:47,509 Otro plato más 376 00:14:47,509 --> 00:14:48,870 A ver 377 00:14:48,870 --> 00:14:51,509 Vamos a meter, por ejemplo 378 00:14:51,509 --> 00:14:53,429 Hamburguesa, pizza, ensalada 379 00:14:53,429 --> 00:14:56,110 Vamos a meter, yo que sé, cocido 380 00:14:56,110 --> 00:15:00,539 Que el cocido tiene 381 00:15:00,539 --> 00:15:04,659 Pues morcilla, garbanzos y patatas 382 00:15:04,659 --> 00:15:12,649 Y ahora, sí, ahora lo cambio de nombre 383 00:15:12,649 --> 00:15:15,129 Patatas 384 00:15:15,129 --> 00:15:17,230 Y este es P4 385 00:15:17,230 --> 00:15:21,149 P4 386 00:15:21,149 --> 00:15:24,230 P4 387 00:15:24,230 --> 00:15:26,750 Y P4 388 00:15:26,750 --> 00:15:29,750 Vale, y ahora me falta añadir a mi restaurante 389 00:15:29,750 --> 00:15:31,350 Add plato 390 00:15:31,350 --> 00:15:32,169 P4 391 00:15:32,169 --> 00:15:34,750 Vale, tengo un nuevo plato 392 00:15:34,750 --> 00:15:37,070 Que es el último 393 00:15:37,070 --> 00:15:38,610 Venga 394 00:15:38,610 --> 00:15:41,289 Voy a intentar eliminar ahora 395 00:15:41,289 --> 00:15:42,470 La hamburguesa 396 00:15:42,470 --> 00:15:45,429 Voy a ver si consigo eliminar la hamburguesa 397 00:15:45,429 --> 00:15:47,309 De esta carta de cuatro platos 398 00:15:47,309 --> 00:15:48,149 Que tengo ahora 399 00:15:48,149 --> 00:15:51,269 eliminar plato 400 00:15:51,269 --> 00:15:54,490 pues ahora sí que me la he eliminado 401 00:15:54,490 --> 00:15:57,210 antes no me eliminaba la hamburguesa 402 00:15:57,210 --> 00:15:58,509 y ahora sí, o sea, esto 403 00:15:58,509 --> 00:16:00,250 es absolutamente caótico 404 00:16:00,250 --> 00:16:03,029 ¿vale? pero ¿qué patrón estamos encontrando? 405 00:16:04,269 --> 00:16:05,070 que me da 406 00:16:05,070 --> 00:16:06,250 ese error extraño 407 00:16:06,250 --> 00:16:08,950 cuando intento eliminar el primero y el último 408 00:16:08,950 --> 00:16:11,070 voy a intentar eliminar 409 00:16:11,070 --> 00:16:12,309 ahora el cocido, a ver 410 00:16:12,309 --> 00:16:19,399 vamos a eliminar ahora el cocido 411 00:16:19,399 --> 00:16:21,720 pues aquí ya la hemos liado 412 00:16:21,720 --> 00:16:26,600 entonces 413 00:16:26,600 --> 00:16:29,539 es la primera vez que nos sale 414 00:16:29,539 --> 00:16:31,259 esta excepción, que es muy extraña 415 00:16:31,259 --> 00:16:33,580 que se llama concurrent modification exception 416 00:16:33,580 --> 00:16:35,580 vale, ¿de dónde viene 417 00:16:35,580 --> 00:16:37,159 esta excepción? vámonos al método 418 00:16:37,159 --> 00:16:39,519 viene de que aquí 419 00:16:39,519 --> 00:16:41,559 era 420 00:16:41,559 --> 00:16:43,580 eliminar plato, este 421 00:16:43,580 --> 00:16:44,940 de que aquí 422 00:16:44,940 --> 00:16:47,460 estamos anidando for 423 00:16:47,460 --> 00:16:49,740 que están accediendo 424 00:16:49,740 --> 00:16:51,500 a la vez al mismo sitio 425 00:16:51,500 --> 00:16:52,740 que esa carta 426 00:16:52,740 --> 00:16:54,559 es decir 427 00:16:54,559 --> 00:16:56,399 este for 428 00:16:56,399 --> 00:16:58,259 ya ha cogido ahí 429 00:16:58,259 --> 00:17:00,059 internamente, ya ha cogido 430 00:17:00,059 --> 00:17:02,220 esta colección carta, ya la ha cogido 431 00:17:02,220 --> 00:17:04,559 y la tiene ahí reservada para pipipi y terar 432 00:17:04,559 --> 00:17:06,380 y ahora cuando 433 00:17:06,380 --> 00:17:08,480 encontramos el elemento 434 00:17:08,480 --> 00:17:09,519 que yo quiero borrar 435 00:17:09,519 --> 00:17:11,880 llamo a remove como si no pasara nada 436 00:17:11,880 --> 00:17:14,400 pero remove es un método muy complejo 437 00:17:14,400 --> 00:17:15,640 por dentro, remove que hace 438 00:17:15,640 --> 00:17:17,539 pues remove abre otro for 439 00:17:17,539 --> 00:17:19,720 abre otro for 440 00:17:19,720 --> 00:17:20,799 en el cual 441 00:17:20,799 --> 00:17:24,099 se pone a buscar 442 00:17:24,099 --> 00:17:25,900 el que sea igual a este, cuando lo encuentra 443 00:17:25,900 --> 00:17:27,980 lo borra, pues esto ya no suena raro 444 00:17:27,980 --> 00:17:29,900 o sea, estamos haciendo aquí un for para recoger 445 00:17:29,900 --> 00:17:31,940 la colección, para encontrar un plato 446 00:17:31,940 --> 00:17:33,759 que le volvemos a pasar 447 00:17:33,759 --> 00:17:35,519 para que 448 00:17:35,519 --> 00:17:38,359 ahora ya lo borre 449 00:17:38,359 --> 00:17:39,799 que a su vez va a iterar dentro 450 00:17:39,799 --> 00:17:42,160 entonces esas dos iteraciones son dos iteraciones 451 00:17:42,160 --> 00:17:44,559 concurrentes, dos iteraciones 452 00:17:44,559 --> 00:17:46,319 dos for que cogen internamente 453 00:17:46,319 --> 00:17:48,339 el mismo recurso, bueno pues 454 00:17:48,339 --> 00:17:49,039 de ahí viene 455 00:17:49,039 --> 00:17:51,619 que me salga esto de aquí 456 00:17:51,619 --> 00:17:53,740 oye, pero que me estás haciendo 457 00:17:53,740 --> 00:17:55,859 esto de aquí que es 458 00:17:55,859 --> 00:17:57,420 vamos a ver 459 00:17:57,420 --> 00:17:59,279 hay una comodificación 460 00:17:59,279 --> 00:18:01,519 es decir, estás modificando 461 00:18:01,519 --> 00:18:02,640 desde dos sitios 462 00:18:02,640 --> 00:18:04,700 esto no lo puedes hacer 463 00:18:04,700 --> 00:18:08,839 vale, aquí el tema 464 00:18:08,839 --> 00:18:11,220 es que esto 465 00:18:11,220 --> 00:18:13,019 no lo hacemos nunca, no deberíamos hacerlo nunca 466 00:18:13,019 --> 00:18:14,339 porque hay mil formas de hacer esto 467 00:18:14,339 --> 00:18:16,460 pero sería la más natural 468 00:18:16,460 --> 00:18:18,519 con la filosofía que tenemos ahora 469 00:18:18,519 --> 00:18:21,319 la más natural es, quiero probar un elemento de la colección 470 00:18:21,319 --> 00:18:23,140 voy a recorrer la colección 471 00:18:23,140 --> 00:18:24,059 hasta que lo encuentre 472 00:18:24,059 --> 00:18:26,539 que es lo que hacemos aquí, reconozco la colección hasta que lo encuentre 473 00:18:26,539 --> 00:18:28,000 y cuando lo he encontrado 474 00:18:28,000 --> 00:18:30,380 ahora voy a hacer lo que sea con él 475 00:18:30,380 --> 00:18:32,259 si lo que fuera con él fuera 476 00:18:32,259 --> 00:18:34,279 un system out, ningún problema 477 00:18:34,279 --> 00:18:36,519 pero lo que vamos a hacer 478 00:18:36,519 --> 00:18:37,700 con él a su vez 479 00:18:37,700 --> 00:18:40,680 es meternos otra vez en la colección 480 00:18:40,680 --> 00:18:42,240 carta para iterarla otra vez 481 00:18:42,240 --> 00:18:44,599 a través del interior de remove, no lo hemos hecho nosotros 482 00:18:44,599 --> 00:18:46,400 pero podemos deducir que hace eso 483 00:18:46,400 --> 00:18:48,000 reconozco hasta que encuentre una igual 484 00:18:48,000 --> 00:18:49,960 pues mucha 485 00:18:49,960 --> 00:18:52,200 iteración concurrente, aunque no la veamos 486 00:18:52,200 --> 00:18:54,460 Claro, es que nos hemos complicado la vida un montón 487 00:18:54,460 --> 00:18:56,779 Porque ya el remove 488 00:18:56,779 --> 00:18:58,339 Ya sabemos que el remove 489 00:18:58,339 --> 00:19:00,220 Lo que hace es 490 00:19:00,220 --> 00:19:01,480 Tú le pasas un objeto 491 00:19:01,480 --> 00:19:05,019 Y te borra el que sea igual a ese 492 00:19:05,019 --> 00:19:05,839 Ya está 493 00:19:05,839 --> 00:19:07,500 ¿Por qué vas a tener que recorrer? 494 00:19:07,559 --> 00:19:08,859 No hay ninguna razón para recorrer 495 00:19:08,859 --> 00:19:10,839 Claro, pero me diríais 496 00:19:10,839 --> 00:19:13,660 Pero perdona, es que no me has pasado el plato 497 00:19:13,660 --> 00:19:16,039 Me has pasado el nombre 498 00:19:16,039 --> 00:19:17,259 ¿Vale? ¿Por qué? 499 00:19:17,259 --> 00:19:19,000 Si hubiéramos pasado el plato 500 00:19:19,000 --> 00:19:20,400 Vamos a hacer la versión eliminar 2 501 00:19:20,400 --> 00:19:21,920 De eliminar plato 502 00:19:21,920 --> 00:19:31,250 Bueno, con este va a borrar el primero que encuentra 503 00:19:31,250 --> 00:19:32,410 Igual a este p 504 00:19:32,410 --> 00:19:36,069 Vale, entonces 505 00:19:36,069 --> 00:19:38,910 Vamos a suponer que tenemos aquí 506 00:19:38,910 --> 00:19:41,210 La versión 2 de eliminar plato 507 00:19:41,210 --> 00:19:43,690 Que esta no nos habría causado ningún problema 508 00:19:43,690 --> 00:19:44,230 Porque 509 00:19:44,230 --> 00:19:47,470 La versión 2 de eliminar plato 510 00:19:47,470 --> 00:19:50,170 Si hubiera sido pasado el objeto 511 00:19:50,170 --> 00:19:52,130 Aquí sí que 512 00:19:52,130 --> 00:19:54,529 Habríamos hecho directamente esto 513 00:19:54,529 --> 00:19:57,309 retum 514 00:19:57,309 --> 00:19:59,730 carta punto 515 00:19:59,730 --> 00:20:01,730 remove 516 00:20:01,730 --> 00:20:03,630 plato 517 00:20:03,630 --> 00:20:06,700 ¿vale? 518 00:20:08,039 --> 00:20:10,119 entonces, aquí no habríamos 519 00:20:10,119 --> 00:20:11,960 tenido ningún problema de modificación 520 00:20:11,960 --> 00:20:14,059 concurrente porque solo llegamos a la 521 00:20:14,059 --> 00:20:15,779 carta desde el remove 522 00:20:15,779 --> 00:20:18,019 el remove ya abre su for 523 00:20:18,019 --> 00:20:19,779 se pone a recorrer la colección 524 00:20:19,779 --> 00:20:21,920 y en cuanto encuentra uno igual 525 00:20:21,920 --> 00:20:23,720 que este, lo borra 526 00:20:23,720 --> 00:20:26,880 ¿vale? y me devuelve true 527 00:20:26,880 --> 00:20:28,339 por eso lo he puesto aquí en el return 528 00:20:28,339 --> 00:20:31,160 si el remove después de recorrer 529 00:20:31,160 --> 00:20:32,839 toda la colección no hubiera encontrado 530 00:20:32,839 --> 00:20:34,799 ninguno igual a este, me devuelve false 531 00:20:34,799 --> 00:20:37,079 pues por eso yo lo pongo directamente en el return 532 00:20:37,079 --> 00:20:37,819 y listo 533 00:20:37,819 --> 00:20:41,180 bueno, pues si estuviéramos borrando 534 00:20:41,180 --> 00:20:43,480 por directamente 535 00:20:43,480 --> 00:20:44,380 el elemento plato 536 00:20:44,380 --> 00:20:45,900 no tendría ningún problema 537 00:20:45,900 --> 00:20:48,920 pero hombre, realmente es que 538 00:20:48,920 --> 00:20:50,740 este método, normalmente 539 00:20:50,740 --> 00:20:52,220 cuando tú eliminas 540 00:20:52,220 --> 00:20:55,160 o consultas, lo haces por clave primaria 541 00:20:55,160 --> 00:20:55,940 siempre, ¿no? 542 00:20:56,880 --> 00:21:17,460 No tiene sentido que cuando tú le dices a un usuario de la aplicación, el usuario quiere eliminar un plato de la carta, quiere eliminarlo. Pues tú no le dices, pásame el nombre, su precio y todos los ingredientes. No le dices todo eso para eliminar el plato. Le dices, pásame el nombre y ya se ocupará él de eliminar el plato con ese nombre. 543 00:21:17,460 --> 00:21:20,480 Luego este método así 544 00:21:20,480 --> 00:21:22,119 Pues no es muy operativo 545 00:21:22,119 --> 00:21:23,740 Obligamos al que lo llama 546 00:21:23,740 --> 00:21:25,839 A tener todos los datos enteros 547 00:21:25,839 --> 00:21:28,240 El nombre, el precio, la lista de ingredientes 548 00:21:28,240 --> 00:21:30,460 Pues no, nos gusta más el de arriba 549 00:21:30,460 --> 00:21:32,940 Nos gusta más el de arriba 550 00:21:32,940 --> 00:21:34,680 Cuando yo borro un plato 551 00:21:34,680 --> 00:21:35,660 Quiero darte el nombre 552 00:21:35,660 --> 00:21:37,279 No quiero darte el resto de cosas 553 00:21:37,279 --> 00:21:38,559 Yo te doy el nombre y tú lo borras 554 00:21:38,559 --> 00:21:39,859 Nos gusta más este 555 00:21:39,859 --> 00:21:41,579 Pero este tiene este problema 556 00:21:41,579 --> 00:21:44,480 Claro, pero es que 557 00:21:44,480 --> 00:21:48,400 aquí nos vamos al asunto 558 00:21:48,400 --> 00:21:49,759 del criterio de igualdad 559 00:21:49,759 --> 00:21:52,619 ¿qué hace el remove? borrar un plato 560 00:21:52,619 --> 00:21:54,299 igual a este que 561 00:21:54,299 --> 00:21:55,940 esté aquí, vale 562 00:21:55,940 --> 00:21:58,660 pero igual según que criterio 563 00:21:58,660 --> 00:22:00,359 ostras pues no he puesto 564 00:22:00,359 --> 00:22:01,700 un criterio de igualdad en plato 565 00:22:01,700 --> 00:22:05,910 entonces puedo tener un problema 566 00:22:05,910 --> 00:22:07,690 vamos 567 00:22:07,690 --> 00:22:09,589 por ejemplo a 568 00:22:09,589 --> 00:22:11,990 a probarlo 569 00:22:11,990 --> 00:22:12,690 aquí en el main 570 00:22:12,690 --> 00:22:15,089 vamos a probar aquí en el main 571 00:22:15,089 --> 00:22:19,450 Estoy en mi mail 572 00:22:19,450 --> 00:22:21,589 Voy a quitar esta prueba 573 00:22:21,589 --> 00:22:22,910 Que he hecho antes, que me daba ese error 574 00:22:22,910 --> 00:22:25,109 Que estoy en proceso de arreglarlo 575 00:22:25,109 --> 00:22:26,869 Vale, vamos a 576 00:22:26,869 --> 00:22:28,589 Eliminar 577 00:22:28,589 --> 00:22:30,329 Este tiene 578 00:22:30,329 --> 00:22:34,069 Mi restaurante tiene P1, P2, P3 y P4 579 00:22:34,069 --> 00:22:35,769 Vale 580 00:22:35,769 --> 00:22:38,150 Voy a 581 00:22:38,150 --> 00:22:41,029 Eliminar del restaurante 582 00:22:41,029 --> 00:22:42,950 Eliminar plato 583 00:22:42,950 --> 00:22:45,069 El P1, el primero de todos 584 00:22:45,069 --> 00:22:45,990 que he añadido 585 00:22:45,990 --> 00:22:48,509 eliminar plato versión 2, era 586 00:22:48,509 --> 00:22:51,029 voy a eliminar 587 00:22:51,029 --> 00:22:52,950 el p1 y ahora voy a 588 00:22:52,950 --> 00:22:54,910 ver la carta otra vez, a ver 589 00:22:54,910 --> 00:23:01,400 si lo he eliminado, vale, entonces 590 00:23:01,400 --> 00:23:03,259 debería eliminarlo, si nos vamos 591 00:23:03,259 --> 00:23:04,720 al método eliminar plato 592 00:23:04,720 --> 00:23:07,400 remove, le pasas el objeto plato 593 00:23:07,400 --> 00:23:09,400 remove, ya está, vale 594 00:23:09,400 --> 00:23:11,400 vámonos aquí a hacer el main 595 00:23:11,400 --> 00:23:13,680 a ver la carta antes y ver la carta después 596 00:23:13,680 --> 00:23:15,380 del restaurante, a ver si 597 00:23:15,380 --> 00:23:17,160 lo he eliminado, pues venga 598 00:23:17,160 --> 00:23:18,160 ejecutamos esto 599 00:23:18,160 --> 00:23:19,599 Y 600 00:23:19,599 --> 00:23:23,119 Espera, ¿qué? 601 00:23:35,210 --> 00:23:36,130 Ah, vale, vale, vale 602 00:23:36,130 --> 00:23:37,829 Vale 603 00:23:37,829 --> 00:23:43,990 Lo ha eliminado en normal, pero no quería hacer yo esta prueba 604 00:23:43,990 --> 00:23:45,789 Yo quiero hacer la prueba 605 00:23:45,789 --> 00:23:49,829 Vamos a suponer 606 00:23:49,829 --> 00:23:50,150 Que 607 00:23:50,150 --> 00:23:53,289 Nos hacemos un plato 608 00:23:53,289 --> 00:23:58,440 Plato 609 00:23:58,440 --> 00:24:00,759 P5 610 00:24:00,759 --> 00:24:02,539 Y este plato 611 00:24:02,539 --> 00:24:03,200 P5 612 00:24:03,200 --> 00:24:08,480 ¿Os parece que 613 00:24:08,480 --> 00:24:09,859 Sigamos 614 00:24:09,859 --> 00:24:12,339 Con las paradillas que a lo mejor toquen para que 615 00:24:12,339 --> 00:24:13,539 Es algo y nos vayamos antes? 616 00:24:14,140 --> 00:24:16,759 En lugar de hacer una parada ahora que siempre se estira 5 o 10 minutos 617 00:24:16,759 --> 00:24:20,160 Vale, pues vamos a hacernos un 618 00:24:20,160 --> 00:24:22,039 Vamos a imaginar que este código de arriba 619 00:24:22,039 --> 00:24:23,359 De rellenar los ingredientes 620 00:24:23,359 --> 00:24:25,539 Este código, yo no tengo acceso a él 621 00:24:25,539 --> 00:24:28,119 Porque este código se ha hecho en un mail y ahora yo estoy en otra parte 622 00:24:28,119 --> 00:24:28,539 De mi 623 00:24:28,539 --> 00:24:30,720 Y voy a eliminar un plato 624 00:24:30,720 --> 00:24:32,099 Igual que 625 00:24:32,099 --> 00:24:35,799 Este de aquí, ¿vale? Me voy a hacer un nuevo plato 626 00:24:35,799 --> 00:24:40,279 Me voy a hacer un nuevo plato pizza 627 00:24:40,279 --> 00:24:44,710 Vale 628 00:24:44,710 --> 00:24:47,430 Igualito que este de aquí 629 00:24:47,430 --> 00:24:48,710 Que el P1 630 00:24:48,710 --> 00:24:49,970 Me lo voy a hacer igualito 631 00:24:49,970 --> 00:24:53,329 Vale, igualito, con todos sus datos 632 00:24:53,329 --> 00:24:55,069 Venga 633 00:24:55,069 --> 00:24:58,029 Ahora 634 00:24:58,029 --> 00:24:59,869 P5 635 00:24:59,869 --> 00:25:03,009 P5 y P5, vale 636 00:25:03,009 --> 00:25:05,170 Entonces yo quiero eliminar 637 00:25:05,170 --> 00:25:06,710 Este plato que me acabo de hacer 638 00:25:06,710 --> 00:25:08,869 Este, oye, elimina 639 00:25:08,869 --> 00:25:10,910 La pizza, elimina la pizza 640 00:25:10,910 --> 00:25:15,049 que valía 9,5 y tenía esto, elimínala, pues uno podría decir 641 00:25:15,049 --> 00:25:18,910 venga, tengo el plato al completo, lo tengo al completo, lo acabo de construir 642 00:25:18,910 --> 00:25:21,509 lo tengo al completo, con todos sus datos 643 00:25:21,509 --> 00:25:26,390 pues aquí va, al completito está, con todos sus datos 644 00:25:26,390 --> 00:25:30,289 como el método de eliminar plato me pide el plato al completo 645 00:25:30,289 --> 00:25:34,910 no pasa nada, yo te he construido el plato al completo, te lo he construido 646 00:25:34,910 --> 00:25:38,750 enterito, tú me lo pides para borrarlo, te lo construyo entero 647 00:25:38,750 --> 00:25:42,309 Vamos a tratar de eliminarlo 648 00:25:42,309 --> 00:25:43,990 Viendo la carta antes 649 00:25:43,990 --> 00:25:45,250 Y viendo la carta después 650 00:25:45,250 --> 00:25:49,720 Vale, pues efectivamente 651 00:25:49,720 --> 00:25:52,000 No he eliminado nada 652 00:25:52,000 --> 00:25:53,900 Uno podría pensar 653 00:25:53,900 --> 00:25:55,380 Pero si he construido un plato 654 00:25:55,380 --> 00:25:58,039 Tal cual, como este de aquí 655 00:25:58,039 --> 00:25:59,980 Con sus ingredientes, porque tú quieres que yo te pase 656 00:25:59,980 --> 00:26:01,059 Un plato para borrarlo 657 00:26:01,059 --> 00:26:03,720 Lo he construido, te lo he pasado 658 00:26:03,720 --> 00:26:07,410 Y tú no has borrado nada 659 00:26:07,410 --> 00:26:09,349 No lo has borrado 660 00:26:09,349 --> 00:26:11,309 Vale 661 00:26:11,309 --> 00:26:13,230 ¿por qué no lo ha borrado? 662 00:26:14,690 --> 00:26:16,490 ¿podríais intuir por qué no me lo ha borrado 663 00:26:16,490 --> 00:26:18,190 según lo que hemos dicho que hace Remus 664 00:26:18,190 --> 00:26:20,730 que es que recorre la colección 665 00:26:20,730 --> 00:26:22,569 hasta que encuentra uno igual 666 00:26:22,569 --> 00:26:24,690 al que le has pasado y cuando lo ha encontrado 667 00:26:24,690 --> 00:26:26,089 te lo elimina y ya está 668 00:26:26,089 --> 00:26:28,170 ¿por qué no lo ha borrado? 669 00:26:28,690 --> 00:26:29,329 ¿por qué no lo ha borrado? 670 00:26:29,329 --> 00:26:30,509 ¿por qué no? ¿sólo había uno en el pizza? 671 00:26:32,670 --> 00:26:33,849 ¿cómo que le han salido dos? 672 00:26:34,029 --> 00:26:34,910 a ver, es que tenía 673 00:26:34,910 --> 00:26:36,609 ver carta antes y ver carta después 674 00:26:36,609 --> 00:26:38,809 a ver, tenía 675 00:26:38,809 --> 00:26:40,589 espera, voy a ponerle aquí un separador 676 00:26:40,589 --> 00:26:42,970 primero, ver carta, antes de hacer ningún borrado 677 00:26:42,970 --> 00:26:43,210 uy 678 00:26:43,210 --> 00:26:45,369 y 679 00:26:45,369 --> 00:26:48,529 le voy a poner aquí y ahora 680 00:26:48,529 --> 00:26:49,509 pues esto 681 00:26:49,509 --> 00:26:51,450 ahora 682 00:26:51,450 --> 00:26:54,230 ahora vamos a eliminar 683 00:26:54,230 --> 00:26:56,670 este P5 que es clavado al otro 684 00:26:56,670 --> 00:27:03,400 eliminamos 685 00:27:03,400 --> 00:27:04,039 pizza 686 00:27:04,039 --> 00:27:07,480 y ahora vamos a ver la carta después de haber eliminado pizza 687 00:27:07,480 --> 00:27:11,119 pues esta era la carta 688 00:27:11,119 --> 00:27:11,559 antes 689 00:27:11,559 --> 00:27:14,359 y ahora que ocurre 690 00:27:14,359 --> 00:27:16,440 Que la carta después 691 00:27:16,440 --> 00:27:18,740 Es idéntica, es la misma 692 00:27:18,740 --> 00:27:20,180 No ha hecho nada 693 00:27:20,180 --> 00:27:21,519 ¿Eh? 694 00:27:26,980 --> 00:27:28,220 ¿Pero por qué no lo ha borrado? 695 00:27:28,559 --> 00:27:29,000 Pregunto 696 00:27:29,000 --> 00:27:32,890 ¿Sí? ¿O no? 697 00:27:33,210 --> 00:27:34,769 Es que si no habría salido en la carta 698 00:27:34,769 --> 00:27:35,829 A ver 699 00:27:35,829 --> 00:27:39,190 Mira, a ver 700 00:27:39,190 --> 00:27:44,980 Ah, vale, vale, vale, si tenéis toda la razón 701 00:27:44,980 --> 00:27:45,740 Vale 702 00:27:45,740 --> 00:27:50,980 Restaurante.getcarta.com 703 00:27:51,180 --> 00:27:53,140 Add 704 00:27:53,140 --> 00:27:56,799 Este plato pizza 705 00:27:56,799 --> 00:27:58,960 No, pero es que no lo quiero incluir en el restaurante 706 00:27:58,960 --> 00:28:00,339 Pero no me liéis 707 00:28:00,339 --> 00:28:02,500 ¿Por qué lo voy a incluir en el restaurante? 708 00:28:02,900 --> 00:28:04,019 A ver, yo tengo mi carta 709 00:28:04,019 --> 00:28:05,740 Con los cuatro 710 00:28:05,740 --> 00:28:08,220 Estos 711 00:28:08,220 --> 00:28:09,119 Tengo mi carta 712 00:28:09,119 --> 00:28:12,539 Y ahora lo que yo quiero es la funcionalidad 713 00:28:12,539 --> 00:28:13,880 De eliminar uno 714 00:28:13,880 --> 00:28:15,640 Para eliminar uno 715 00:28:15,640 --> 00:28:17,259 Tengo el método 716 00:28:17,259 --> 00:28:19,680 Este de aquí 717 00:28:19,680 --> 00:28:22,240 tengo el método eliminar plato 718 00:28:22,240 --> 00:28:23,259 al que le pasas un plato 719 00:28:23,259 --> 00:28:26,339 bueno, pues es lo que estoy haciendo 720 00:28:26,339 --> 00:28:28,339 yo tengo mi carta hecha 721 00:28:28,339 --> 00:28:29,880 con mis platos, y ahora 722 00:28:29,880 --> 00:28:32,319 quiero eliminar un plato 723 00:28:32,319 --> 00:28:33,799 pues si lo tienes que pasar 724 00:28:33,799 --> 00:28:35,859 pues lo estoy construyendo 725 00:28:35,859 --> 00:28:37,980 un plato igual al que quiero eliminar 726 00:28:37,980 --> 00:28:39,720 para que lo elimines 727 00:28:39,720 --> 00:28:43,799 por fin, decís algo 728 00:28:43,799 --> 00:28:45,799 que sí, claro 729 00:28:45,799 --> 00:28:48,019 vale, es decir, remove 730 00:28:48,019 --> 00:28:50,559 repito, remove lo que hace es 731 00:28:50,559 --> 00:28:53,099 buscar un objeto 732 00:28:53,099 --> 00:28:54,900 igual al que tú le pasas 733 00:28:54,900 --> 00:28:56,299 el que le pasas da igual de donde venga 734 00:28:56,299 --> 00:28:57,880 busca uno igual 735 00:28:57,880 --> 00:29:00,019 claro, la pregunta es 736 00:29:00,019 --> 00:29:02,240 igual según qué criterio 737 00:29:02,240 --> 00:29:04,880 cuando hacíamos un remove de una lista 738 00:29:04,880 --> 00:29:05,599 de cadenas 739 00:29:05,599 --> 00:29:09,220 no hay ningún problema, la cadena tenía hola, adiós, no sé qué 740 00:29:09,220 --> 00:29:10,720 y ahora tú le pasabas un string 741 00:29:10,720 --> 00:29:11,599 que venía de donde fuera 742 00:29:11,599 --> 00:29:14,900 era hola y encuentra uno igual 743 00:29:14,900 --> 00:29:16,680 y lo elimina, ¿por qué? 744 00:29:16,680 --> 00:29:19,519 Porque el equals de string está implementado 745 00:29:19,519 --> 00:29:22,420 y el equals de string te dice que una cadena es igual a otra 746 00:29:22,420 --> 00:29:24,660 y todos sus caracteres son iguales, ¿vale? 747 00:29:25,019 --> 00:29:28,859 Pero aquí necesita la igualdad entre platos. 748 00:29:29,200 --> 00:29:30,940 ¿Cuál es la igualdad entre platos? 749 00:29:31,079 --> 00:29:32,440 No la hay implementada. 750 00:29:32,680 --> 00:29:34,539 Yo no he implementado el equals en plato. 751 00:29:35,200 --> 00:29:38,200 Entonces, si yo no he implementado el equals en plato, 752 00:29:38,740 --> 00:29:40,640 el criterio de igualdad para el remove 753 00:29:40,640 --> 00:29:43,119 es el de la superclase, que es object. 754 00:29:43,119 --> 00:29:45,299 y el criterio 755 00:29:45,299 --> 00:29:47,680 y el equals de la superclase 756 00:29:47,680 --> 00:29:49,680 es dos objetos 757 00:29:49,680 --> 00:29:51,579 son iguales si su dirección 758 00:29:51,579 --> 00:29:52,619 de memoria es la misma 759 00:29:52,619 --> 00:29:54,400 eso es lo que hemos dicho siempre, ¿no? 760 00:29:54,779 --> 00:29:57,259 el equals de object es 761 00:29:57,259 --> 00:29:59,180 este objeto es igual a este 762 00:29:59,180 --> 00:30:01,859 solo si están exactamente 763 00:30:01,859 --> 00:30:03,599 en la misma dirección de memoria 764 00:30:03,599 --> 00:30:05,519 ese es el equals de object 765 00:30:05,519 --> 00:30:07,640 con lo cual 766 00:30:07,640 --> 00:30:09,440 cualquier otra clase que yo haga 767 00:30:09,440 --> 00:30:11,559 si yo no sobre escribo 768 00:30:11,559 --> 00:30:13,519 el equals, su criterio de igualdad 769 00:30:13,519 --> 00:30:15,539 es el mismo, pero en la vida real 770 00:30:15,539 --> 00:30:17,519 no funcionamos así, en las aplicaciones no funcionamos 771 00:30:17,519 --> 00:30:19,660 así, si yo estoy haciendo una matrícula 772 00:30:19,660 --> 00:30:21,240 y me das la 773 00:30:21,240 --> 00:30:23,500 misma matrícula, me la das dos veces 774 00:30:23,500 --> 00:30:25,359 porque te has equivocado 775 00:30:25,359 --> 00:30:27,240 porque has hecho la solicitud dos veces 776 00:30:27,240 --> 00:30:28,539 la misma con el mismo DNI 777 00:30:28,539 --> 00:30:31,539 y dices, no, perdona, es que esta es la misma 778 00:30:31,539 --> 00:30:33,319 no voy a tramitar dos veces 779 00:30:33,319 --> 00:30:34,819 lo mismo con el mismo DNI 780 00:30:34,819 --> 00:30:37,359 entonces, el criterio de 781 00:30:37,359 --> 00:30:39,160 igualdad en el mundo real 782 00:30:39,160 --> 00:30:41,339 no es por dirección de memoria 783 00:30:41,339 --> 00:30:43,099 dos objetos pueden estar en diferentes líneas de memoria 784 00:30:43,099 --> 00:30:44,420 pero la aplicación son el mismo 785 00:30:44,420 --> 00:30:46,599 ¿vale? pues entonces 786 00:30:46,599 --> 00:30:48,759 ¿por qué no elimina aquí la pizza? 787 00:30:48,880 --> 00:30:51,039 no porque este código esté mal, el main está estupendo 788 00:30:51,039 --> 00:30:53,359 lo elimina porque la clase 789 00:30:53,359 --> 00:30:55,480 plato no tiene criterio de igualdad 790 00:30:55,480 --> 00:30:56,599 con lo cual usa el de object 791 00:30:56,599 --> 00:30:58,960 ¿vale? pues nuestro problema no está en el main 792 00:30:58,960 --> 00:31:00,160 nuestro problema está aquí 793 00:31:00,160 --> 00:31:02,599 bueno, pues entonces aquí 794 00:31:02,599 --> 00:31:04,599 es cuando 795 00:31:04,599 --> 00:31:07,160 en la clase plato es cuando decimos 796 00:31:07,160 --> 00:31:07,819 vamos a ver 797 00:31:07,819 --> 00:31:10,619 para la aplicación 798 00:31:10,619 --> 00:31:14,559 que le hace ver que un objeto 799 00:31:14,559 --> 00:31:16,380 que un plato sea igual a otro 800 00:31:16,380 --> 00:31:19,380 tengo que irme de los campos a cuáles son clave primaria 801 00:31:19,380 --> 00:31:21,099 pues en este caso el nombre 802 00:31:21,099 --> 00:31:24,380 dos platos que se llaman igual son el mismo 803 00:31:24,380 --> 00:31:27,579 y dos platos que se llaman diferente son diferente 804 00:31:27,579 --> 00:31:30,920 el nombre es su clave primaria 805 00:31:30,920 --> 00:31:34,940 pues me tendré que hacer un equals por nombre 806 00:31:34,940 --> 00:31:37,539 que lo puedo sobre escribir tal cual a mano 807 00:31:37,539 --> 00:31:38,960 porque me acuerdo yo de la cabecera 808 00:31:38,960 --> 00:31:41,779 O lo genero 809 00:31:41,779 --> 00:31:43,299 Con el entorno de desarrollo que estoy usando 810 00:31:43,299 --> 00:31:44,660 Me da igual el que estéis usando 811 00:31:44,660 --> 00:31:50,009 El eclipse ya sabemos que lo generamos de esta manera 812 00:31:50,009 --> 00:31:51,950 Ala 813 00:31:51,950 --> 00:31:53,089 Ya tenemos un equals 814 00:31:53,089 --> 00:31:55,630 El me hace el hascode también, el hascode no lo estamos usando 815 00:31:55,630 --> 00:31:56,230 Lo borramos 816 00:31:56,230 --> 00:31:58,890 Me hace un equals por nombre 817 00:31:58,890 --> 00:32:01,529 Entonces ahora ya si 818 00:32:01,529 --> 00:32:05,420 Mi main ya si que va a funcionar 819 00:32:05,420 --> 00:32:07,140 ¿Vale? Porque ahora ya el remove 820 00:32:07,140 --> 00:32:09,480 Si va a partir de igualdad de nombres 821 00:32:09,480 --> 00:32:11,559 Entonces ahora ya 822 00:32:11,559 --> 00:32:12,480 El problema no era mi main 823 00:32:12,480 --> 00:32:15,339 El problema era que el plato no tenía el criterio de igualdad 824 00:32:15,339 --> 00:32:16,759 Pues ahora yo ejecuto mi main 825 00:32:16,759 --> 00:32:19,400 Y trato de eliminar la pizza 826 00:32:19,400 --> 00:32:21,380 Y efectivamente 827 00:32:21,380 --> 00:32:21,940 Ahora sí 828 00:32:21,940 --> 00:32:23,900 Ahora sí que la ha eliminado 829 00:32:23,900 --> 00:32:30,029 Botón derecho 830 00:32:30,029 --> 00:32:31,730 Source 831 00:32:31,730 --> 00:32:33,789 Generar hashcode 832 00:32:33,789 --> 00:32:34,349 Unequals 833 00:32:34,349 --> 00:32:38,069 Y aquí seleccionas cuál de los campos 834 00:32:38,069 --> 00:32:39,190 Es el que fija la igualdad 835 00:32:39,190 --> 00:32:40,430 Que puede ser uno o más de uno 836 00:32:40,430 --> 00:32:42,369 ¿Vale? 837 00:32:42,369 --> 00:32:45,509 entonces cualquier entidad 838 00:32:45,509 --> 00:32:46,849 que maneja una aplicación 839 00:32:46,849 --> 00:32:49,490 pues habrá que ponerle 840 00:32:49,490 --> 00:32:51,410 un equals, porque es que si no 841 00:32:51,410 --> 00:32:53,190 le falta información a la aplicación 842 00:32:53,190 --> 00:32:55,210 le falta información respecto a qué hace 843 00:32:55,210 --> 00:32:56,529 que dos objetos sean iguales 844 00:32:56,529 --> 00:32:59,210 porque puede haber objetos 845 00:32:59,210 --> 00:33:01,170 que se refieren a la misma cosa 846 00:33:01,170 --> 00:33:03,390 aunque estén en direcciones de memoria 847 00:33:03,390 --> 00:33:05,029 distintas y eso lo tenemos que saber 848 00:33:05,029 --> 00:33:12,930 bueno, pues aquí entonces ahora ya 849 00:33:12,930 --> 00:33:13,549 en este mail 850 00:33:13,549 --> 00:33:16,470 hago la siguiente pregunta 851 00:33:16,470 --> 00:33:17,930 este main de aquí 852 00:33:17,930 --> 00:33:20,650 en el que hemos creado un objeto 853 00:33:20,650 --> 00:33:21,390 p5 854 00:33:21,390 --> 00:33:24,289 plato igual al que queríamos 855 00:33:24,289 --> 00:33:26,529 borrar, idéntico en todos sus campos 856 00:33:26,529 --> 00:33:28,670 nombre, ingredientes 857 00:33:28,670 --> 00:33:30,250 y se lo he pasado 858 00:33:30,250 --> 00:33:32,170 al remove, al remove que está aquí dentro 859 00:33:32,170 --> 00:33:34,150 y ese remove no ha tenido ningún problema 860 00:33:34,150 --> 00:33:36,089 ha encontrado uno igual a este nuevo 861 00:33:36,089 --> 00:33:36,890 que acabo de hacer 862 00:33:36,890 --> 00:33:39,890 ha encontrado uno igual, aunque este está en otra 863 00:33:39,890 --> 00:33:41,230 y es de mi memoria porque es uno nuevo 864 00:33:41,230 --> 00:33:43,650 pero ha encontrado uno igual y lo ha borrado 865 00:33:43,650 --> 00:33:46,150 vale, y ahora mi pregunta 866 00:33:46,150 --> 00:33:46,609 es 867 00:33:46,609 --> 00:33:49,970 para eliminar este plato que se llama 868 00:33:49,970 --> 00:33:51,970 pizza, para eliminar el plato que se llama 869 00:33:51,970 --> 00:33:54,269 pizza, podríamos 870 00:33:54,269 --> 00:33:56,269 haber simplificado un poquito 871 00:33:56,269 --> 00:33:58,150 este código, alguna de estas seis 872 00:33:58,150 --> 00:33:59,950 líneas, siete líneas que tenemos aquí 873 00:33:59,950 --> 00:34:04,299 claro, solo 874 00:34:04,299 --> 00:34:06,420 necesito para el 875 00:34:06,420 --> 00:34:08,420 P5, el que le paso como parámetro 876 00:34:08,420 --> 00:34:10,239 con que tenga el nombre 877 00:34:10,239 --> 00:34:12,300 es suficiente, porque el remove, el único 878 00:34:12,300 --> 00:34:13,900 que va a mirar, el remove solo va a mirar el nombre 879 00:34:13,900 --> 00:34:16,460 el remove no va a mirar más, solo va a mirar el nombre 880 00:34:16,460 --> 00:34:17,639 entonces 881 00:34:17,639 --> 00:34:20,980 Esto me está sobrando 882 00:34:20,980 --> 00:34:23,199 Y me está sobrando hasta esto 883 00:34:23,199 --> 00:34:25,219 Pero como no tengo un constructor solo de nombre 884 00:34:25,219 --> 00:34:27,079 Pues bueno, le pongo cualquier cosa 885 00:34:27,079 --> 00:34:28,719 Como si le pusiera 100 886 00:34:28,719 --> 00:34:30,260 Es que da igual lo que le ponga ahí 887 00:34:30,260 --> 00:34:43,260 Ah, vale, vale 888 00:34:43,260 --> 00:34:48,320 Pero no lo puede 889 00:34:48,320 --> 00:34:51,170 Vale 890 00:34:51,170 --> 00:34:53,989 Como es un double con envolvente 891 00:34:53,989 --> 00:34:55,809 Pues no lo promociona automáticamente 892 00:34:55,809 --> 00:34:57,090 Desde lint 893 00:34:57,090 --> 00:34:59,150 Porque 100 a palo seco 894 00:34:59,150 --> 00:35:00,829 100 a palo seco 895 00:35:00,829 --> 00:35:02,449 Sería un int 896 00:35:02,449 --> 00:35:03,690 Un int en primitivo 897 00:35:03,690 --> 00:35:06,769 Y un int en primitivo a dabble primitivo 898 00:35:06,769 --> 00:35:07,989 Si lo sabe promocionar 899 00:35:07,989 --> 00:35:10,409 Pero un int primitivo a dabble envolvente 900 00:35:10,409 --> 00:35:11,250 Como tengo aquí 901 00:35:11,250 --> 00:35:13,670 Dabble 902 00:35:13,670 --> 00:35:14,909 No lo sabe promocionar 903 00:35:14,909 --> 00:35:17,469 Pero un dabble primitivo 904 00:35:17,469 --> 00:35:18,949 Que este sería un dabble primitivo 905 00:35:18,949 --> 00:35:21,070 A un dabble envolvente si lo sabe promocionar 906 00:35:21,070 --> 00:35:24,469 Venga pues ya está 907 00:35:24,469 --> 00:35:27,789 Pues este me va a borrar la pizza sin ningún problema 908 00:35:27,789 --> 00:35:29,269 Si es que el remove que hay aquí dentro 909 00:35:29,269 --> 00:35:30,070 Eliminar plato 910 00:35:30,070 --> 00:35:32,570 El remove que hay aquí en eliminar plato 911 00:35:32,570 --> 00:35:34,050 Solamente mira el nombre 912 00:35:34,050 --> 00:35:34,849 Solo mira el nombre 913 00:35:34,849 --> 00:35:35,750 Porque ese es el equals 914 00:35:35,750 --> 00:35:36,730 Solo mira el nombre 915 00:35:36,730 --> 00:35:38,050 Luego 916 00:35:38,050 --> 00:35:41,489 Con poner aquí pizza 917 00:35:41,489 --> 00:35:42,050 Ya está 918 00:35:42,050 --> 00:35:42,869 ¿Vale? 919 00:35:44,530 --> 00:35:46,050 Efectivamente me borra la pizza 920 00:35:46,050 --> 00:35:47,909 ¿Que quiero borrar ensalada? 921 00:35:49,989 --> 00:35:50,889 Pues ya está 922 00:35:50,889 --> 00:35:52,050 Pongo aquí ensalada 923 00:35:52,050 --> 00:35:56,130 Y ese es el que elimina 924 00:35:56,130 --> 00:35:57,349 La ensalada 925 00:35:57,349 --> 00:36:05,519 ¿Vale? 926 00:36:07,380 --> 00:36:07,940 Luego 927 00:36:07,940 --> 00:36:10,260 Cuando usemos un remove 928 00:36:10,260 --> 00:36:12,079 para eliminar 929 00:36:12,079 --> 00:36:13,219 elementos de una colección 930 00:36:13,219 --> 00:36:15,880 tenemos que tener muy claro que la clase 931 00:36:15,880 --> 00:36:17,820 a la que pertenecen 932 00:36:17,820 --> 00:36:19,860 los elementos de la colección tiene que tener 933 00:36:19,860 --> 00:36:21,940 el equals, porque si no lo 934 00:36:21,940 --> 00:36:23,800 tiene va a tirar del de object y eso no va a 935 00:36:23,800 --> 00:36:25,840 funcionar bien, va a eliminar 936 00:36:25,840 --> 00:36:27,400 solamente si son el mismo 937 00:36:27,400 --> 00:36:29,960 sobre la misma dirección de memoria y eso no ocurre nunca 938 00:36:29,960 --> 00:36:31,179 ¿vale? 939 00:36:36,929 --> 00:36:38,909 Bueno, pues estando esto claro 940 00:36:38,909 --> 00:36:39,610 clarísimo 941 00:36:39,610 --> 00:36:41,989 vamos al método 942 00:36:41,989 --> 00:36:45,170 a la otra versión de eliminar plato 943 00:36:45,170 --> 00:36:47,469 Que no recibía el objeto entero 944 00:36:47,469 --> 00:36:48,929 Con lo cual recibiendo el entero 945 00:36:48,929 --> 00:36:50,130 El remove es muy sencillo 946 00:36:50,130 --> 00:36:51,789 Sino que recibe el nombre 947 00:36:51,789 --> 00:36:55,429 Y que este nos daba el error 948 00:36:55,429 --> 00:36:56,309 Porque 949 00:36:56,309 --> 00:37:00,909 Porque dentro del remove 950 00:37:00,909 --> 00:37:03,309 Accedía a 951 00:37:03,309 --> 00:37:05,809 Con un for y ya teníamos un for fuera 952 00:37:05,809 --> 00:37:07,909 Con lo cual esto que hemos hecho aquí 953 00:37:07,909 --> 00:37:11,670 Error 954 00:37:11,670 --> 00:37:13,750 De concurrencia 955 00:37:13,750 --> 00:37:15,389 Vale 956 00:37:15,389 --> 00:37:17,349 con lo cual esto de aquí no nos gusta 957 00:37:17,349 --> 00:37:22,460 vale, pues con lo que sabemos 958 00:37:22,460 --> 00:37:24,500 ahora, que código 959 00:37:24,500 --> 00:37:26,500 podríamos poner aquí, para eliminar plato 960 00:37:26,500 --> 00:37:28,260 dado su nombre, exclusivamente 961 00:37:28,260 --> 00:37:30,199 solo el nombre, que es como querremos enviar un plato 962 00:37:30,199 --> 00:37:34,309 a partir del nombre, claro, creamos 963 00:37:34,309 --> 00:37:37,920 aquí un plato, con ese 964 00:37:37,920 --> 00:37:43,760 nombre, cualquier precio 965 00:37:43,760 --> 00:37:45,559 o lo ideal sería este, un constructor 966 00:37:45,559 --> 00:37:47,739 solo por nombre, mejor, o uno vacío 967 00:37:47,739 --> 00:37:48,940 y le hago el set 968 00:37:48,940 --> 00:37:50,659 como sea, vale 969 00:37:50,659 --> 00:37:53,380 y llamo al remove 970 00:37:53,380 --> 00:37:54,000 y ya está 971 00:37:54,000 --> 00:38:01,280 retuncarta.removep 972 00:38:01,280 --> 00:38:03,159 y ya está 973 00:38:03,159 --> 00:38:06,949 y me va a borrar 974 00:38:06,949 --> 00:38:08,829 el primer plato 975 00:38:08,829 --> 00:38:10,789 que encuentre exactamente igual 976 00:38:10,789 --> 00:38:11,250 a este 977 00:38:11,250 --> 00:38:14,769 y exactamente igual a este significa que su nombre 978 00:38:14,769 --> 00:38:15,809 sea igual, ya está 979 00:38:15,809 --> 00:38:17,929 porque la igualdad no mira más 980 00:38:17,929 --> 00:38:19,050 cosas 981 00:38:19,050 --> 00:38:33,650 vamos a probarlo en el main 982 00:38:33,650 --> 00:38:38,289 vamos a eliminar 983 00:38:38,289 --> 00:38:41,900 esto lo dejamos comentado 984 00:38:41,900 --> 00:38:56,420 Y ahora vamos a eliminarla por nombre 985 00:38:56,420 --> 00:38:58,320 No por plato, ahora ya es mucho más sencillo 986 00:38:58,320 --> 00:38:58,739 El main 987 00:38:58,739 --> 00:39:01,760 Porque en el main 988 00:39:01,760 --> 00:39:04,360 El que usa el main quiere eliminar por nombre 989 00:39:04,360 --> 00:39:05,820 No quiere tener que construir un plato 990 00:39:05,820 --> 00:39:07,780 Quiere eliminar por nombre 991 00:39:07,780 --> 00:39:10,760 Pues venga, vamos a eliminar la ensalada 992 00:39:10,760 --> 00:39:14,440 Bueno, el que nos daba problemas de modificación concurrente 993 00:39:14,440 --> 00:39:16,840 Que era el que era primero o último 994 00:39:16,840 --> 00:39:17,420 La pizza 995 00:39:17,420 --> 00:39:18,780 Vamos a eliminar la pizza 996 00:39:18,780 --> 00:39:20,980 Y ahora vamos a mostrar la carta 997 00:39:20,980 --> 00:39:30,219 Vale, llamando ahora ya el método 998 00:39:30,219 --> 00:39:31,500 Que recibe solo el nombre 999 00:39:31,500 --> 00:39:32,440 Que es lo natural 1000 00:39:32,440 --> 00:39:36,159 Ahora este ya no debería darnos 1001 00:39:36,159 --> 00:39:37,119 Ninguna excepción 1002 00:39:37,119 --> 00:39:38,159 ¿Vale? 1003 00:39:39,000 --> 00:39:40,199 Que quiero borrar el último 1004 00:39:40,199 --> 00:39:41,480 Que el último nos daba problemas 1005 00:39:41,480 --> 00:39:43,260 Cuando hacíamos lo del for y todo eso 1006 00:39:43,260 --> 00:39:51,739 Pues ala, borro el último 1007 00:39:51,739 --> 00:39:54,079 ¿Vale? Sin problema 1008 00:39:54,079 --> 00:40:19,630 Vale, vamos a poner más métodos aquí 1009 00:40:19,630 --> 00:40:21,829 Para que hagáis 1010 00:40:21,829 --> 00:40:23,010 Se supone que estos dos 1011 00:40:23,010 --> 00:40:24,789 O los habéis hecho o estáis en 1012 00:40:24,789 --> 00:40:26,289 Proceso de 1013 00:40:26,289 --> 00:40:29,250 Y vamos a poner 1014 00:40:29,250 --> 00:40:30,650 No tenemos por ejemplo 1015 00:40:30,650 --> 00:40:33,789 Eliminar todos los platos que contengan un ingrediente 1016 00:40:33,789 --> 00:40:36,889 Ese no lo teníamos 1017 00:40:36,889 --> 00:40:38,050 Tenemos eliminar un plato 1018 00:40:38,050 --> 00:40:40,090 Por nombre 1019 00:40:40,090 --> 00:40:47,139 Eliminar 1020 00:40:47,139 --> 00:40:50,969 Platos que contienen 1021 00:40:50,969 --> 00:41:03,389 El resultado final 1022 00:41:03,389 --> 00:41:06,050 De este método es que en la carta hayan desaparecido 1023 00:41:06,050 --> 00:41:08,010 Todos los platos que contengan 1024 00:41:08,010 --> 00:41:08,590 Esto de aquí 1025 00:41:08,590 --> 00:41:10,969 Pues venga 1026 00:41:10,969 --> 00:41:13,789 Haced este y los que no hayan 1027 00:41:13,789 --> 00:41:14,809 Hecho los anteriores 1028 00:41:14,809 --> 00:41:16,889 Pues los hacéis también 1029 00:41:16,889 --> 00:41:17,510 Gracias.