1 00:00:01,010 --> 00:00:12,470 Bueno, pues aquí primero la clase apunte económico abstracta con tres propiedades, dos métodos, uno de los cuales no hace falta que sea abstracto y otro sí. 2 00:00:12,849 --> 00:00:27,030 Bueno, pues aquí seguimos las pautas y os habrá quedado pues algo como esto, la clase abstracta con sus tres propiedades, un constructor, las clases abstractas pueden tener constructores aunque no se instancien nunca, claro. 3 00:00:27,030 --> 00:00:30,690 Los get y los set 4 00:00:30,690 --> 00:00:32,350 Que heredarán las subclases 5 00:00:32,350 --> 00:00:36,310 Y ejercicio actual 6 00:00:36,310 --> 00:00:38,490 Pues bueno, hay que coger 7 00:00:38,490 --> 00:00:39,750 Del código 8 00:00:39,750 --> 00:00:42,170 Los cuatro primeros dígitos 9 00:00:42,170 --> 00:00:42,950 Que son el año 10 00:00:42,950 --> 00:00:46,210 Y ya está, entonces como el código es un entero 11 00:00:46,210 --> 00:00:48,829 Lo primero habrá que pasarlo a string 12 00:00:48,829 --> 00:00:51,590 Para poder coger los cuatro primeros dígitos 13 00:00:51,590 --> 00:00:52,469 ¿Vale? 14 00:00:52,990 --> 00:00:54,530 Bueno, pues esta es la forma más cómoda 15 00:00:54,530 --> 00:00:55,289 De pasar a string 16 00:00:55,289 --> 00:00:59,350 Ahora, ¿cómo cogemos los cuatro primeros dígitos? 17 00:01:00,210 --> 00:01:02,530 Pues hombre, si desplegáis en los métodos de string 18 00:01:02,530 --> 00:01:04,890 Rápidamente encontráis su string 19 00:01:04,890 --> 00:01:06,829 O si no lo podéis hacer a mano 20 00:01:06,829 --> 00:01:09,769 Concatenando charad0, macharad1, macharad2 21 00:01:09,769 --> 00:01:10,569 ¿Vale? 22 00:01:10,609 --> 00:01:12,049 Siempre podríais hacer esto a mano 23 00:01:12,049 --> 00:01:13,989 Así un poco a lo más cutre, ¿no? 24 00:01:14,790 --> 00:01:17,510 Es decir, primero nos cogemos 25 00:01:17,510 --> 00:01:21,989 El año, que es el código en string 26 00:01:21,989 --> 00:01:22,849 Que sería 27 00:01:22,849 --> 00:01:27,370 Esto, por ejemplo 28 00:01:27,370 --> 00:01:31,760 Y ahora, pues siempre 29 00:01:31,760 --> 00:01:32,700 Podríais hacer 30 00:01:32,700 --> 00:01:45,819 Y así 31 00:01:45,819 --> 00:01:47,739 Concatenado uno 32 00:01:47,739 --> 00:01:48,239 Tras otro 33 00:01:48,239 --> 00:01:51,579 Lo cual sería un rollo 34 00:01:51,579 --> 00:01:53,540 Un poco feo y muy poco 35 00:01:53,540 --> 00:01:55,480 Profesional, pero bueno 36 00:01:55,480 --> 00:01:59,439 Así os estaríais quedando 37 00:01:59,439 --> 00:02:00,420 Entendéis lo que estoy haciendo 38 00:02:00,420 --> 00:02:03,500 Os estaríais quedando con los cuatro 39 00:02:03,500 --> 00:02:04,859 Primeros caracteres 40 00:02:04,859 --> 00:02:07,620 Y luego ya tendríais que pasarlo a string 41 00:02:07,620 --> 00:02:09,180 O sea, esto sería una cosa muy fea 42 00:02:09,180 --> 00:02:11,539 Pero bueno, puestos a hacer cosas feas 43 00:02:11,539 --> 00:02:12,120 Pues ya 44 00:02:12,120 --> 00:02:20,840 Charac3 45 00:02:20,840 --> 00:02:23,620 Charac3 46 00:02:23,620 --> 00:02:29,460 Esto sería los cuatro primeros dígitos 47 00:02:29,460 --> 00:02:30,159 En string 48 00:02:30,159 --> 00:02:32,860 Y ahora tendríamos que convertirlos a entero, claro 49 00:02:32,860 --> 00:02:36,590 Para convertir a entero 50 00:02:36,590 --> 00:02:38,750 Ya sabemos que tenemos el parseInt 51 00:02:38,750 --> 00:02:41,090 Entonces, hombre 52 00:02:41,090 --> 00:02:42,270 En caso de 53 00:02:42,270 --> 00:02:44,650 Necesidad, que no se nos ocurra 54 00:02:44,650 --> 00:02:46,270 cotillear los métodos de string 55 00:02:46,270 --> 00:02:48,689 que no, pues bueno, siempre podemos hacer esto 56 00:02:48,689 --> 00:02:49,909 ¿no? 57 00:02:50,409 --> 00:02:51,969 siempre podríamos hacer esto de aquí arriba 58 00:02:51,969 --> 00:02:53,810 pero bueno, un poco feo es 59 00:02:53,810 --> 00:02:56,610 un poco feo es, lo dejamos aquí comentado 60 00:02:56,610 --> 00:02:58,270 siempre sería mejor 61 00:02:58,270 --> 00:03:00,569 me quedo con los cuatro primeros 62 00:03:00,569 --> 00:03:02,610 dígitos del substring, pues si uno 63 00:03:02,610 --> 00:03:04,569 mira la ayuda, empieza 64 00:03:04,569 --> 00:03:06,490 en la posición que tú le digas 65 00:03:06,490 --> 00:03:08,650 y coge tantos caracteres 66 00:03:08,650 --> 00:03:10,469 a partir de ahí como tú le digas después 67 00:03:10,469 --> 00:03:12,469 empieza en la cero y coge cuatro 68 00:03:12,469 --> 00:03:14,310 vale, y ahora 69 00:03:14,310 --> 00:03:16,909 esa subcadena 70 00:03:16,909 --> 00:03:18,650 que son los cuatro primeros dígitos 71 00:03:18,650 --> 00:03:20,830 pues la tenemos que cambiar a entero, claro 72 00:03:20,830 --> 00:03:22,930 pero para eso ya conocemos este método 73 00:03:22,930 --> 00:03:25,110 vale, pues get ejercicio 74 00:03:25,110 --> 00:03:27,009 actual, este puede 75 00:03:27,009 --> 00:03:28,870 estar en la clase abstracta porque en todos 76 00:03:28,870 --> 00:03:30,689 los apuntes económicos funciona igual 77 00:03:30,689 --> 00:03:32,490 pues así lo dejamos 78 00:03:32,490 --> 00:03:34,789 vale, y ahora 79 00:03:34,789 --> 00:03:36,810 el método de escribir es el que se queda como 80 00:03:36,810 --> 00:03:39,050 abstracto porque cada apunte económico 81 00:03:39,050 --> 00:03:40,830 tiene su propia descripción 82 00:03:40,830 --> 00:03:41,689 se supone 83 00:03:41,689 --> 00:03:43,610 bueno 84 00:03:43,610 --> 00:03:45,990 entonces el hashCode 85 00:03:45,990 --> 00:03:47,990 e equals lo he puesto 86 00:03:47,990 --> 00:03:50,289 luego a posteriori 87 00:03:50,289 --> 00:03:51,849 cuando ya he hecho gestión económica 88 00:03:51,849 --> 00:03:53,990 al ver que es un hashSet 89 00:03:53,990 --> 00:03:55,830 pero bueno, ahora mismo como que lo ignoramos 90 00:03:55,830 --> 00:03:58,650 vale, pues tenemos aquí las propiedades 91 00:03:58,650 --> 00:04:00,150 constructor, getSet 92 00:04:00,150 --> 00:04:02,310 y los dos métodos, uno de los cuales es 93 00:04:02,310 --> 00:04:04,150 abstracto 94 00:04:04,150 --> 00:04:06,050 está por definir, lo cual 95 00:04:06,050 --> 00:04:07,909 hace la clase abstracta, vale 96 00:04:07,909 --> 00:04:10,090 subclases, la factura 97 00:04:10,090 --> 00:04:12,569 la factura que añade 98 00:04:12,569 --> 00:04:14,129 dos propiedades 99 00:04:14,129 --> 00:04:15,389 ¿qué son esas dos? 100 00:04:16,889 --> 00:04:18,209 ¿vale? pues entonces 101 00:04:18,209 --> 00:04:21,769 aquí es que esto 102 00:04:21,769 --> 00:04:23,790 es así, vale 103 00:04:23,790 --> 00:04:26,029 bueno, pues un constructor 104 00:04:26,029 --> 00:04:28,350 un constructor normalmente basado 105 00:04:28,350 --> 00:04:30,389 en el superconstructor 106 00:04:30,389 --> 00:04:32,149 en el constructor de la superclase 107 00:04:32,149 --> 00:04:34,129 como siempre, pues este 108 00:04:34,129 --> 00:04:36,470 constructor recibe los cinco parámetros 109 00:04:36,470 --> 00:04:38,470 de la factura, los cinco parámetros 110 00:04:38,470 --> 00:04:39,449 y con esos cinco 111 00:04:39,449 --> 00:04:41,550 Actualiza las propiedades 112 00:04:41,550 --> 00:04:42,709 ¿Vale? Aquí 113 00:04:42,709 --> 00:04:45,110 Pues podríamos poner protected 114 00:04:45,110 --> 00:04:48,560 A lo mejor para 115 00:04:48,560 --> 00:04:51,279 Facilitar el acceso 116 00:04:51,279 --> 00:04:52,980 A estos campos 117 00:04:52,980 --> 00:04:54,300 En la subclase 118 00:04:54,300 --> 00:05:01,189 ¿Vale? Así en cualquier subclase 119 00:05:01,189 --> 00:05:03,069 Pues podemos acceder 120 00:05:03,069 --> 00:05:04,709 Pues venga 121 00:05:04,709 --> 00:05:07,220 Vale 122 00:05:07,220 --> 00:05:10,920 Y ahora al heredar tiene que implementar 123 00:05:10,920 --> 00:05:12,300 Describir, pues ya está 124 00:05:12,300 --> 00:05:13,800 Lo que fuera, da igual 125 00:05:13,800 --> 00:05:15,199 Lo que fuera 126 00:05:15,199 --> 00:05:17,759 Venga, gestión empresarial 127 00:05:17,759 --> 00:05:18,779 Pues lo mismo 128 00:05:18,779 --> 00:05:20,339 Hereda 129 00:05:20,339 --> 00:05:23,420 Dos propiedades, ponía string 130 00:05:23,420 --> 00:05:25,959 Pero bueno, pues como es una fecha 131 00:05:25,959 --> 00:05:27,220 Podríamos poner local date 132 00:05:27,220 --> 00:05:29,500 Constructor 133 00:05:29,500 --> 00:05:31,680 Basado en el super constructor, como siempre 134 00:05:31,680 --> 00:05:33,720 Get y set 135 00:05:33,720 --> 00:05:35,939 Y el sobrescrito 136 00:05:35,939 --> 00:05:37,759 Este obligatorio 137 00:05:37,759 --> 00:05:38,480 De hacerlo, claro 138 00:05:38,480 --> 00:05:41,720 Pues lo que fuera, lo que pidiera el examen 139 00:05:41,720 --> 00:05:43,980 Que sería mostrar un mensajito con toda la descripción 140 00:05:43,980 --> 00:05:46,560 El emisor, el no sé qué, lo que fuera 141 00:05:46,560 --> 00:05:48,579 Mostrar los datos, vamos, en definitiva 142 00:05:48,579 --> 00:05:49,879 Como si fuera un toString 143 00:05:49,879 --> 00:05:52,139 El describir sería como si fuera un toString 144 00:05:52,139 --> 00:05:53,920 Vale, y ahora ya 145 00:05:53,920 --> 00:05:56,500 Esta clase tiene el main 146 00:05:56,500 --> 00:05:58,259 Tiene los datos, lo tiene todo 147 00:05:58,259 --> 00:06:00,319 Pues venga 148 00:06:00,319 --> 00:06:02,220 Los datos de la aplicación 149 00:06:02,220 --> 00:06:05,079 Son todo el conjunto de apuntes económicos 150 00:06:05,079 --> 00:06:06,019 Pues son estos 151 00:06:06,019 --> 00:06:08,980 Los ponemos aquí, fuera del main 152 00:06:08,980 --> 00:06:12,160 Para que puedan acceder a los datos 153 00:06:12,160 --> 00:06:13,959 Todos los métodos del main 154 00:06:13,959 --> 00:06:16,379 porque me han dicho aquí que el main 155 00:06:16,379 --> 00:06:18,079 que es este, gestión económica 156 00:06:18,079 --> 00:06:19,879 implementa el main y tiene los métodos 157 00:06:19,879 --> 00:06:20,959 que hacen cosas 158 00:06:20,959 --> 00:06:23,120 pues entonces para facilitar 159 00:06:23,120 --> 00:06:25,939 que los métodos puedan acceder 160 00:06:25,939 --> 00:06:27,600 a todas esas cosas que se hace 161 00:06:27,600 --> 00:06:29,959 pues ese conjunto 162 00:06:29,959 --> 00:06:30,800 fuera del main 163 00:06:30,800 --> 00:06:33,639 vale, pues aquí está 164 00:06:33,639 --> 00:06:37,910 este es mi set de apuntes 165 00:06:37,910 --> 00:06:39,009 entonces ahora ya sí 166 00:06:39,009 --> 00:06:40,370 cuando 167 00:06:40,370 --> 00:06:43,529 veo que los apuntes económicos 168 00:06:43,529 --> 00:06:45,250 van a estar metidos en un hash set 169 00:06:45,250 --> 00:06:49,449 para que ciertos métodos del hashSet 170 00:06:49,449 --> 00:06:51,370 como contains, equals, todo eso 171 00:06:51,370 --> 00:06:52,790 funcionen correctamente 172 00:06:52,790 --> 00:06:55,730 el remove para que funcionen correctamente 173 00:06:55,730 --> 00:06:57,529 pues necesitamos que haya 174 00:06:57,529 --> 00:06:59,470 un hashCode equals o lo que es lo mismo 175 00:06:59,470 --> 00:07:01,149 que haya un criterio de igualdad 176 00:07:01,149 --> 00:07:03,410 para el hashSet dentro 177 00:07:03,410 --> 00:07:04,930 de la clase a la que pertenece 178 00:07:04,930 --> 00:07:07,750 entonces aquí la confusión 179 00:07:07,750 --> 00:07:09,149 es que tengo tres clases 180 00:07:09,149 --> 00:07:11,189 ¿dónde pongo el hashCode equals? 181 00:07:13,389 --> 00:07:14,910 claro, entonces 182 00:07:14,910 --> 00:07:19,529 si la igualdad de todos es por código, el código está en la superclase 183 00:07:19,529 --> 00:07:23,129 entonces no hay problema, yo lo pongo en la superclase por código 184 00:07:23,129 --> 00:07:26,709 y ya vale los de abajo, si la igualdad 185 00:07:26,709 --> 00:07:30,930 de las clases de abajo fuera por otros parámetros suyos propios 186 00:07:30,930 --> 00:07:34,910 pues luego tendría que sobreescribir abajo el jasco de equals, pero aquí no hace falta 187 00:07:34,910 --> 00:07:39,449 entonces en apunto económico, pues aquí es donde pondríamos jasco de equals 188 00:07:39,449 --> 00:07:41,610 por código 189 00:07:41,610 --> 00:07:45,970 entonces mirad que aquí el equals 190 00:07:45,970 --> 00:07:49,610 aquí, esto es un caso 191 00:07:49,610 --> 00:07:51,889 un poco raro, lo que pasa es que claro, este ejercicio 192 00:07:51,889 --> 00:07:53,850 no estaba pensado para hacerse con un hash set 193 00:07:53,850 --> 00:07:55,569 sino con un hash map que como funciona 194 00:07:55,569 --> 00:07:57,750 de forma distinta, al transformarlo 195 00:07:57,750 --> 00:07:59,649 a un hash set, se queda una situación 196 00:07:59,649 --> 00:08:01,430 un poco rara, vale 197 00:08:01,430 --> 00:08:03,649 porque si yo digo 198 00:08:03,649 --> 00:08:05,550 la igualdad es por códigos, vale 199 00:08:05,550 --> 00:08:06,790 entonces tengo una factura 200 00:08:06,790 --> 00:08:09,089 y una gestión empresarial 201 00:08:09,089 --> 00:08:11,410 con el mismo código 202 00:08:11,410 --> 00:08:12,810 son la misma 203 00:08:12,810 --> 00:08:15,810 en realidad no deberían ser la misma 204 00:08:15,810 --> 00:08:18,170 porque una es un gasto empresarial 205 00:08:18,170 --> 00:08:19,290 y otra es una factura 206 00:08:19,290 --> 00:08:21,209 entonces 207 00:08:21,209 --> 00:08:23,550 eso 208 00:08:23,550 --> 00:08:25,329 se contempla aquí 209 00:08:25,329 --> 00:08:28,069 recordad que el equals que te da 210 00:08:28,069 --> 00:08:29,709 el equals que te da 211 00:08:29,709 --> 00:08:31,250 el eclipse 212 00:08:31,250 --> 00:08:32,889 te dice ya directamente 213 00:08:32,889 --> 00:08:35,509 si la clase a la que pertenece este objeto 214 00:08:35,509 --> 00:08:37,710 no es la clase a la que pertenece 215 00:08:37,710 --> 00:08:38,789 el que tú le pasas 216 00:08:38,789 --> 00:08:41,529 Doy por sentado que son distintos 217 00:08:41,529 --> 00:08:43,610 Doy por sentado que son distintos 218 00:08:43,610 --> 00:08:45,389 Aunque tuvieran el mismo código 219 00:08:45,389 --> 00:08:48,009 Entonces habría que ver 220 00:08:48,009 --> 00:08:49,730 En esta situación queremos que sea así 221 00:08:49,730 --> 00:08:52,769 Tengo una factura con código 3 222 00:08:52,769 --> 00:08:54,769 Y un gasto empresarial con código 3 223 00:08:54,769 --> 00:08:56,210 Asumo que son la misma 224 00:08:56,210 --> 00:08:58,009 Pues hombre, no deberían ser la misma 225 00:08:58,009 --> 00:09:00,450 Vale, lo que quiero decir es que 226 00:09:00,450 --> 00:09:02,190 Al haber cambiado este ejercicio 227 00:09:02,190 --> 00:09:03,649 De Hashmat a Hashet 228 00:09:03,649 --> 00:09:05,370 Se queda una cosa un poco rara 229 00:09:05,370 --> 00:09:06,610 Pero bueno 230 00:09:06,610 --> 00:09:09,649 Pues ya está 231 00:09:09,649 --> 00:09:10,690 Tenemos hascode equal 232 00:09:10,690 --> 00:09:13,169 Se hereda tal cual en las otras dos 233 00:09:13,169 --> 00:09:14,929 Igualdad por código y ya está 234 00:09:14,929 --> 00:09:16,870 Y ya está 235 00:09:16,870 --> 00:09:18,370 Y con eso acabamos 236 00:09:18,370 --> 00:09:20,169 La primera clase 237 00:09:20,169 --> 00:09:24,220 Perdón 238 00:09:24,220 --> 00:09:26,620 El tema de los datos 239 00:09:26,620 --> 00:09:27,279 Aquí 240 00:09:27,279 --> 00:09:29,539 Estábamos aquí 241 00:09:29,539 --> 00:09:31,580 Un set, un haset de estos 242 00:09:31,580 --> 00:09:33,200 Vale, ahora 243 00:09:33,200 --> 00:09:35,299 ¿Qué métodos tiene mi aplicación? 244 00:09:35,500 --> 00:09:36,759 Métodos que yo he puesto aquí 245 00:09:36,759 --> 00:09:38,820 que luego ya la idea es llamarlos 246 00:09:38,820 --> 00:09:40,000 desde el main para probar 247 00:09:40,000 --> 00:09:42,840 crear apunte 248 00:09:42,840 --> 00:09:44,940 pues nada, crear apunte 249 00:09:44,940 --> 00:09:46,779 aquí es un rollo 250 00:09:46,779 --> 00:09:48,759 porque hay que decir, ¿qué quiere? factura y gestión 251 00:09:48,759 --> 00:09:50,879 económico, en función de eso un switch case 252 00:09:50,879 --> 00:09:52,059 o un if else 253 00:09:52,059 --> 00:09:54,779 y en función del que quiera pedir ya los datos 254 00:09:54,779 --> 00:09:56,559 y ya está 255 00:09:56,559 --> 00:09:58,980 y instancia el objeto 256 00:09:58,980 --> 00:10:00,899 y una vez instancia el objeto añadirlo 257 00:10:00,899 --> 00:10:02,399 con un add, o sea este no 258 00:10:02,399 --> 00:10:04,799 tiene ninguna dificultad salvo el 259 00:10:04,799 --> 00:10:06,299 rollo de pedir todos los datos 260 00:10:06,299 --> 00:10:24,860 Salvo el rollo de pedirlos y además distinguir, preguntarle primero, ¿es factura, gestión empresarial? En función de eso te pido unos datos u otros. Pero la única cosa que tenía es que la aplicación se tiene que asegurar de que el código es único, ¿vale? 261 00:10:24,860 --> 00:10:50,059 Y entonces, para que el código sea único, ¿cuál es la mejor estrategia? El código normalmente, los códigos, las claves primarias de los datos, y esto en bases de datos funciona igual, las claves primarias no suelen ser datos que se le pidan al usuario, porque trasladar al usuario la responsabilidad de la unicidad es un poco, 262 00:10:50,059 --> 00:10:52,039 y si tengo mil datos y me dices 263 00:10:52,039 --> 00:10:54,120 dame la clave, jolín, hasta que 264 00:10:54,120 --> 00:10:55,740 acierte con uno que no exista 265 00:10:55,740 --> 00:10:57,820 entonces no se debería trasladar 266 00:10:57,820 --> 00:11:00,240 al que mete los datos 267 00:11:00,240 --> 00:11:01,240 del nuevo objeto 268 00:11:01,240 --> 00:11:04,000 la responsabilidad de dar un código único 269 00:11:04,000 --> 00:11:05,700 porque podría haber otros 30.000 270 00:11:05,700 --> 00:11:07,720 por eso la mayoría de las 271 00:11:07,720 --> 00:11:09,279 tablas 272 00:11:09,279 --> 00:11:11,980 en bases de datos pues tienen una clave 273 00:11:11,980 --> 00:11:13,960 primaria que es autoincrement 274 00:11:13,960 --> 00:11:15,779 ¿no? porque 275 00:11:15,779 --> 00:11:17,639 así se genera ya solita 276 00:11:17,639 --> 00:11:20,039 y tenemos la seguridad, la garantía de que 277 00:11:20,039 --> 00:11:22,340 hay una clave primaria que es imprescindible 278 00:11:22,340 --> 00:11:23,700 en un diseño relacional 279 00:11:23,700 --> 00:11:26,500 aquí no hay un autoincrement 280 00:11:26,500 --> 00:11:27,919 no hay algo que Java 281 00:11:27,919 --> 00:11:30,100 te diga, vale, usa un tipo 282 00:11:30,100 --> 00:11:32,279 de dato autoincrement y yo me aseguro 283 00:11:32,279 --> 00:11:33,899 de que se se incrementa, no, pero lo podemos 284 00:11:33,899 --> 00:11:34,940 simular nosotros 285 00:11:34,940 --> 00:11:37,399 vale, pues yo aquí es lo que haría 286 00:11:37,399 --> 00:11:40,019 entonces, cada vez 287 00:11:40,019 --> 00:11:41,620 que creemos un nuevo apunte 288 00:11:41,620 --> 00:11:44,320 yo no le pido ese dato al usuario 289 00:11:44,320 --> 00:11:45,039 no se lo pido 290 00:11:45,039 --> 00:11:48,120 sino le asigno 291 00:11:48,120 --> 00:11:49,500 uno a partir 292 00:11:49,500 --> 00:11:52,500 De un valor que tenga esta variable 293 00:11:52,500 --> 00:11:53,539 Inicialmente cero 294 00:11:53,539 --> 00:11:55,000 Que podría ser el primer código 295 00:11:55,000 --> 00:11:57,940 Cuando se lo asigne al primer apunte 296 00:11:57,940 --> 00:12:00,399 Me aseguro de dejarlo incrementado 297 00:12:00,399 --> 00:12:02,159 Me aseguro de dejarlo incrementado 298 00:12:02,159 --> 00:12:04,080 ¿Vale? 299 00:12:04,700 --> 00:12:05,019 Pero 300 00:12:05,019 --> 00:12:07,179 ¿Este es el código 301 00:12:07,179 --> 00:12:09,379 Primero es la fecha y después ya? 302 00:12:09,840 --> 00:12:12,159 Claro, pero sí, pero luego lo concatenarías 303 00:12:12,159 --> 00:12:14,460 Claro, lo concatenarías al año 304 00:12:14,460 --> 00:12:15,279 ¿Vale? 305 00:12:17,440 --> 00:12:17,919 Entonces 306 00:12:17,919 --> 00:12:20,519 pero esto es para generar ese serial 307 00:12:20,519 --> 00:12:21,320 de alguna manera 308 00:12:21,320 --> 00:12:24,240 entonces la forma más cómoda es simular 309 00:12:24,240 --> 00:12:26,399 el autoincrement de una base 310 00:12:26,399 --> 00:12:26,899 de datos 311 00:12:26,899 --> 00:12:30,059 entonces el crear apunte 312 00:12:30,059 --> 00:12:31,759 pues es pedir los datos 313 00:12:31,759 --> 00:12:33,519 el año 314 00:12:33,519 --> 00:12:36,139 el año y 315 00:12:36,139 --> 00:12:37,519 luego generar esto 316 00:12:37,519 --> 00:12:41,519 que generarlo es coger 317 00:12:41,519 --> 00:12:44,220 el valor que tenga esta variable estática 318 00:12:44,220 --> 00:12:48,059 ahí global, estática 319 00:12:48,059 --> 00:12:49,860 y dejarla incrementada 320 00:12:49,860 --> 00:12:51,679 ¿vale? dejarla incrementada 321 00:12:51,679 --> 00:12:52,419 y ya está 322 00:12:52,419 --> 00:12:56,240 el año 323 00:12:56,240 --> 00:12:57,639 o bien se podría pedir 324 00:12:57,639 --> 00:12:59,500 o bien incluso se podría sacar 325 00:12:59,500 --> 00:13:01,440 pero bueno, eso es una cosa que no os pedí 326 00:13:01,440 --> 00:13:04,019 en el examen no se pedía 327 00:13:04,019 --> 00:13:06,139 lógicamente por el manejo del local date 328 00:13:06,139 --> 00:13:06,879 y de todo eso 329 00:13:06,879 --> 00:13:10,460 pues se podría sacar el año actual de la clase local date 330 00:13:10,460 --> 00:13:11,860 que tiene un montón de métodos para hacer cosas 331 00:13:11,860 --> 00:13:13,139 entre ellas el año en el que estás 332 00:13:13,139 --> 00:13:15,740 pues podrías tú sacar de la clase local date 333 00:13:15,740 --> 00:13:16,179 el año 334 00:13:16,179 --> 00:13:19,399 el año en el que estás actualmente 335 00:13:19,399 --> 00:13:21,200 y concatenarlo a este código 336 00:13:21,200 --> 00:13:23,200 y ya está, o si no se le pregunta 337 00:13:23,200 --> 00:13:24,500 al usuario y se acabó 338 00:13:24,500 --> 00:13:27,440 ¿vale? pero sobre todo lo que me importa es 339 00:13:27,440 --> 00:13:29,360 la idea 340 00:13:29,360 --> 00:13:31,220 de que los códigos únicos 341 00:13:31,220 --> 00:13:32,779 no son responsabilidad 342 00:13:32,779 --> 00:13:35,179 normalmente del que introduce los datos 343 00:13:35,179 --> 00:13:36,720 sino de la propia aplicación 344 00:13:36,720 --> 00:13:39,080 ¿vale? y esta es la forma 345 00:13:39,080 --> 00:13:41,000 más sencilla de asegurarse un código 346 00:13:41,000 --> 00:13:43,159 único, ¿entendido? 347 00:13:43,279 --> 00:13:46,580 ¿no? vale 348 00:13:46,580 --> 00:13:48,620 Buscar apunte 349 00:13:48,620 --> 00:13:52,639 Pues esto es lo más sencillo 350 00:13:52,639 --> 00:13:54,799 Y teras 351 00:13:54,799 --> 00:13:56,559 Y como tenemos la suerte 352 00:13:56,559 --> 00:13:58,480 De que el código 353 00:13:58,480 --> 00:14:01,620 Pertenece a la superclase 354 00:14:01,620 --> 00:14:03,720 Pertenece a la superclase 355 00:14:03,720 --> 00:14:05,679 Pues no necesito 356 00:14:05,679 --> 00:14:07,940 Distinguir si es una factura 357 00:14:07,940 --> 00:14:08,519 Si es una factura 358 00:14:08,519 --> 00:14:09,100 No necesito 359 00:14:09,100 --> 00:14:11,639 Este es el polimorfismo puro 360 00:14:11,639 --> 00:14:14,419 Todos los apuntes económicos 361 00:14:14,419 --> 00:14:15,980 Sean gestiones, sean facturas 362 00:14:15,980 --> 00:14:17,899 Sean gastos empresariales 363 00:14:17,899 --> 00:14:19,139 Sean facturas, tienen getcode 364 00:14:19,139 --> 00:14:21,580 Lo llamo, si es igual al código que me han dado 365 00:14:21,580 --> 00:14:22,919 Ya tengo el objeto 366 00:14:22,919 --> 00:14:25,080 Si he salido de aquí 367 00:14:25,080 --> 00:14:26,700 Si he salido de este for 368 00:14:26,700 --> 00:14:29,899 Lo he completado, es porque nunca salí por aquí 369 00:14:29,899 --> 00:14:31,700 ¿Verdad? Nunca salí por aquí 370 00:14:31,700 --> 00:14:33,720 Eso significa 371 00:14:33,720 --> 00:14:36,120 Que no aparece 372 00:14:36,120 --> 00:14:38,159 Ese código, pues entonces devuelvo null 373 00:14:38,159 --> 00:14:40,039 Devuelvo null y se acabó 374 00:14:40,039 --> 00:14:44,440 Vale, aquí lo único 375 00:14:44,440 --> 00:14:46,419 Que, pero ya digo 376 00:14:46,419 --> 00:14:48,279 es que este ejercicio no estaba pensado para hacer con 377 00:14:48,279 --> 00:14:49,899 haset, si 378 00:14:49,899 --> 00:14:51,679 queréis usar el contains 379 00:14:51,679 --> 00:14:53,860 para ver si 380 00:14:53,860 --> 00:14:56,360 existe alguno con 381 00:14:56,360 --> 00:14:58,259 este, si existe alguno, pues aquí 382 00:14:58,259 --> 00:15:00,200 no es tan sencillo, porque 383 00:15:00,200 --> 00:15:02,360 aquí uno haría, si apuntes 384 00:15:02,360 --> 00:15:04,360 punto contains 385 00:15:04,360 --> 00:15:06,539 y aquí 386 00:15:06,539 --> 00:15:08,259 como usábamos esto, pues como 387 00:15:08,259 --> 00:15:09,519 la igualdad es por código 388 00:15:09,519 --> 00:15:12,519 aquí poníamos un objeto 389 00:15:12,519 --> 00:15:14,659 con ese código 390 00:15:14,659 --> 00:15:16,399 y el resto de propiedades nos daban igual 391 00:15:16,399 --> 00:15:19,720 porque el contains va a mirar la igualdad 392 00:15:19,720 --> 00:15:21,100 basada en el código solo 393 00:15:21,100 --> 00:15:24,259 pero yo aquí no puedo instanciar un apunte económico 394 00:15:24,259 --> 00:15:26,240 no puedo instanciarlo 395 00:15:26,240 --> 00:15:30,480 entonces el contains aquí no sería tan fácil 396 00:15:30,480 --> 00:15:32,980 tendría que poner 397 00:15:32,980 --> 00:15:37,820 si contiene una new factura con este código 398 00:15:37,820 --> 00:15:40,399 o si contiene 399 00:15:40,399 --> 00:15:42,580 es decir, no sería tan fácil 400 00:15:42,580 --> 00:15:48,289 factura, por ejemplo, con el código code 401 00:15:48,289 --> 00:15:59,330 y el resto de propiedades de factura que son double int, no, double string, int y string. 402 00:16:00,129 --> 00:16:32,809 Pues por ejemplo, 0, 0, 0, 0 o new gasto empresarial con lo que tenga gasto empresarial 403 00:16:32,809 --> 00:16:34,350 Que la que nos importa es 404 00:16:34,350 --> 00:16:36,289 El código y luego tiene 405 00:16:36,289 --> 00:16:37,470 Double string 406 00:16:37,470 --> 00:16:40,429 Y todo, puedo ponerlo ahí 407 00:16:40,429 --> 00:16:48,720 Vale, entendéis lo que digo 408 00:16:48,720 --> 00:16:50,019 Que aquí el contains 409 00:16:50,019 --> 00:16:51,500 Se complica 410 00:16:51,500 --> 00:16:54,320 Porque la aplicación 411 00:16:54,320 --> 00:16:55,139 Perdón 412 00:16:55,139 --> 00:16:58,519 El set de apuntes tiene dos tipos de objetos 413 00:16:58,519 --> 00:17:00,220 Puede tener facturas 414 00:17:00,220 --> 00:17:02,080 Puede tener gastos empresariales 415 00:17:02,080 --> 00:17:04,000 Ahí perfectamente entremezclados 416 00:17:04,000 --> 00:17:05,960 Porque como todos son apuntes económicos 417 00:17:05,960 --> 00:17:07,619 Y el set es de apunte económico 418 00:17:07,619 --> 00:17:08,900 Puede tener de todo 419 00:17:08,900 --> 00:17:12,039 Entonces cuando yo quiero ver si apuntes contiene algo 420 00:17:12,039 --> 00:17:13,119 Siempre hacemos 421 00:17:13,119 --> 00:17:15,200 Si contiene un objeto como este 422 00:17:15,200 --> 00:17:18,400 Y ahí ya nos hacíamos new la clase que fuera 423 00:17:18,400 --> 00:17:20,200 Con los datos que fueran 424 00:17:20,200 --> 00:17:21,640 Pero aquí 425 00:17:21,640 --> 00:17:23,839 No puedo hacer un si contiene un new 426 00:17:23,839 --> 00:17:25,640 Apunto económico con ese código 427 00:17:25,640 --> 00:17:27,700 No puedo porque no puedo instanciar apunto económico 428 00:17:27,700 --> 00:17:29,319 Porque es una clase abstracta 429 00:17:29,319 --> 00:17:30,500 Pero podríamos hacer esto 430 00:17:30,500 --> 00:17:33,160 Si contiene una factura con este código 431 00:17:33,160 --> 00:17:35,000 Porque el resto de propiedades me dan igual 432 00:17:35,000 --> 00:17:36,579 Porque no se miran en el equals 433 00:17:36,579 --> 00:17:39,279 o contiene 434 00:17:39,279 --> 00:17:41,559 un gasto empresarial con ese código 435 00:17:41,559 --> 00:17:43,299 pues entonces podría 436 00:17:43,299 --> 00:17:44,220 concluir que sí 437 00:17:44,220 --> 00:17:45,359 que 438 00:17:45,359 --> 00:17:49,740 contiene un apunte económico con ese código 439 00:17:49,740 --> 00:17:50,500 ¿vale? 440 00:17:50,720 --> 00:17:52,339 si quisiéramos usar el contains 441 00:17:52,339 --> 00:17:54,759 me refiero, para lo que fuera 442 00:17:54,759 --> 00:17:56,539 entonces 443 00:17:56,539 --> 00:17:59,440 por ejemplo 444 00:17:59,440 --> 00:18:01,380 para dejarlo aquí puesto 445 00:18:01,380 --> 00:18:05,420 voy a hacer al contrario, si no contiene 446 00:18:05,420 --> 00:18:07,119 que devuelva null 447 00:18:07,119 --> 00:18:09,319 y entonces 448 00:18:09,319 --> 00:18:19,400 sería el negado del or sería si no contiene una factura con ese código y tampoco contiene una con 449 00:18:19,400 --> 00:18:36,220 ese reto nulo y ahora ya si no me pasó aquí por ejemplo vale pero bueno que esto es un poco lío 450 00:18:36,220 --> 00:18:48,819 por tener dos sub clases dentro de la super clase lo dejo aquí comentado vale siguiente método 451 00:18:49,519 --> 00:19:14,500 importe total de las facturas, esto como lo haríais, como lo habéis hecho, importe total de las facturas hay que recorrer la colección de apuntes y solo, solamente sumar a la suma las que sean facturas, entonces esto pues habréis hecho algo así, 452 00:19:14,500 --> 00:19:30,450 Aquí con una variable suma inicialmente igual a 0 453 00:19:30,450 --> 00:19:39,430 Y ahora aquí solamente si A resulta que es una factura 454 00:19:39,430 --> 00:19:43,269 Solamente en el caso de que A sea una factura 455 00:19:43,269 --> 00:19:49,269 Pues entonces en ese caso habrá que sumar su importe 456 00:19:49,269 --> 00:19:52,670 ¿Vale? Y entonces 457 00:19:52,670 --> 00:19:55,049 Porque factura es una propiedad 458 00:19:55,049 --> 00:19:56,210 Solo, perdón 459 00:19:56,210 --> 00:20:01,599 Ah, importe es de 460 00:20:01,599 --> 00:20:03,539 Apunte, con lo cual no hace falta 461 00:20:03,539 --> 00:20:04,759 Ni hacer el casting ni nada 462 00:20:04,759 --> 00:20:07,799 Porque ya tiene GetImporte 463 00:20:07,799 --> 00:20:09,359 ¿Vale? 464 00:20:11,180 --> 00:20:13,799 Si importe solo fuera de factura 465 00:20:13,799 --> 00:20:15,480 Solo, pues habría que hacer aquí 466 00:20:15,480 --> 00:20:17,079 Un casting, claro, pero no es el caso 467 00:20:17,079 --> 00:20:19,640 Y ahora 468 00:20:19,640 --> 00:20:21,140 RetunSuma y ya está 469 00:20:21,140 --> 00:20:22,619 Algo así 470 00:20:22,619 --> 00:20:23,539 ¿Vale? 471 00:20:24,599 --> 00:20:26,519 Vale, pues entonces os pongo yo ahora 472 00:20:26,519 --> 00:20:27,579 Por ejemplo este método 473 00:20:27,579 --> 00:20:30,859 Porque quedaría algo aquí más 474 00:20:30,859 --> 00:20:33,359 Importar facturas 475 00:20:33,359 --> 00:20:34,819 ¿Ya está? 476 00:20:38,130 --> 00:20:38,609 ¿Qué? 477 00:20:42,240 --> 00:20:43,680 Bueno, luego ya tiene el main 478 00:20:43,680 --> 00:20:45,180 El main que es para probarlo 479 00:20:45,180 --> 00:20:46,279 ¿Vale? 480 00:20:46,440 --> 00:20:47,940 Que es llamar a estos y ya está 481 00:20:47,940 --> 00:20:48,619 El main, vale 482 00:20:48,619 --> 00:20:51,200 Pero lo que me interesa ahora 483 00:20:51,200 --> 00:20:52,160 Pues imaginaos 484 00:20:52,160 --> 00:20:53,799 Imaginad que ahora añadimos 485 00:20:53,799 --> 00:21:03,079 un método que fuera este listado de todos los gastos empresariales por orden 486 00:21:03,079 --> 00:21:21,779 devuelve un listado de gastos empresariales por orden de importe, por orden descendente, 487 00:21:21,779 --> 00:21:23,859 es decir, el más caro primero 488 00:21:23,859 --> 00:21:26,079 descendente 489 00:21:26,079 --> 00:21:27,279 de importe 490 00:21:27,279 --> 00:21:32,160 vale, pues venga, si hubiera que hacer 491 00:21:32,160 --> 00:21:36,490 este método, ¿qué es lo que haríais? 492 00:21:37,650 --> 00:21:38,130 primero 493 00:21:38,130 --> 00:21:39,630 pensamos, hay que ordenar 494 00:21:39,630 --> 00:21:40,930 hay que ordenar 495 00:21:40,930 --> 00:21:44,069 pues como no sabemos 496 00:21:44,069 --> 00:21:46,049 ordenar nosotros, porque no hemos implementado 497 00:21:46,049 --> 00:21:47,089 la ordenación nosotros 498 00:21:47,089 --> 00:21:50,069 ya sabemos que tenemos un sort, que es como ordenamos 499 00:21:50,069 --> 00:21:51,369 con un sort, vale 500 00:21:51,369 --> 00:21:53,250 pero lo primero que pensamos es 501 00:21:53,250 --> 00:21:55,849 vale, el método sort 502 00:21:55,849 --> 00:21:57,569 me funcionan las listas 503 00:21:57,569 --> 00:21:58,849 y en los Arrays, claro 504 00:21:58,849 --> 00:22:00,769 me funcionan las listas 505 00:22:00,769 --> 00:22:03,430 entonces yo necesito una lista 506 00:22:03,430 --> 00:22:04,910 de gastos empresariales 507 00:22:04,910 --> 00:22:07,549 ¿tengo una lista de gastos empresariales 508 00:22:07,549 --> 00:22:09,130 que pueda ordenar, sea algún 509 00:22:09,130 --> 00:22:10,109 criterio? 510 00:22:11,049 --> 00:22:13,529 no, tenemos un conjunto de apuntes 511 00:22:13,529 --> 00:22:15,049 pues entonces 512 00:22:15,049 --> 00:22:16,970 lo ideal sería, vamos a crearnos 513 00:22:16,970 --> 00:22:19,529 una lista de gastos empresariales 514 00:22:19,529 --> 00:22:21,289 y cuando ya tenga eso, eso ya 515 00:22:21,289 --> 00:22:22,529 lo puedo ordenar 516 00:22:22,529 --> 00:22:24,910 ¿vale? entonces, primero 517 00:22:24,910 --> 00:22:27,490 me piden que ordene no sé qué 518 00:22:27,490 --> 00:22:29,289 vale, para ordenarlo 519 00:22:29,289 --> 00:22:31,309 tengo que tener una lista, si no, no puedo ordenar 520 00:22:31,309 --> 00:22:32,849 nada, o en un array 521 00:22:32,849 --> 00:22:35,049 pero una lista es más fácil de crear 522 00:22:35,049 --> 00:22:37,250 bueno, pues voy a 523 00:22:37,250 --> 00:22:38,990 crearme esa lista, esa lista 524 00:22:38,990 --> 00:22:41,289 de donde me saco los datos para 525 00:22:41,289 --> 00:22:43,009 ella, pues tendrán que ser 526 00:22:43,009 --> 00:22:45,170 todos los gastos empresariales 527 00:22:45,170 --> 00:22:45,609 de 528 00:22:45,609 --> 00:22:49,269 los apuntes, bueno pues 529 00:22:49,269 --> 00:22:50,910 entonces nos vamos a hacer esa lista 530 00:22:50,910 --> 00:22:56,069 lo primero de todo, una lista 531 00:22:56,069 --> 00:22:59,089 De gasto empresarial 532 00:22:59,089 --> 00:23:00,109 Vale 533 00:23:00,109 --> 00:23:17,450 Esto mismo por ejemplo 534 00:23:17,450 --> 00:23:18,549 Ahora vamos a construirla 535 00:23:18,549 --> 00:23:21,910 Pues para construirla lo más fácil es 536 00:23:21,910 --> 00:23:23,430 Pues venga 537 00:23:23,430 --> 00:23:25,029 Vamos a sacarlos de aquí 538 00:23:25,029 --> 00:23:27,430 Económico 539 00:23:27,430 --> 00:23:34,000 Apuntes 540 00:23:34,000 --> 00:23:38,289 Y ahora 541 00:23:38,289 --> 00:23:39,930 Si A 542 00:23:39,930 --> 00:23:42,549 Resulta que es 543 00:23:42,549 --> 00:23:44,950 Un objeto 544 00:23:44,950 --> 00:23:46,650 Gasto 545 00:23:46,650 --> 00:23:48,710 empresarial 546 00:23:48,710 --> 00:23:51,549 pues si lo es 547 00:23:51,549 --> 00:23:53,430 se va a mi lista 548 00:23:53,430 --> 00:23:56,869 gastos.ad 549 00:23:56,869 --> 00:23:57,509 ese objeto 550 00:23:57,509 --> 00:24:08,450 ¿por qué me da este rojo? 551 00:24:10,170 --> 00:24:12,009 ¿por qué me da error de compilación? 552 00:24:14,579 --> 00:24:14,819 ahí 553 00:24:14,819 --> 00:24:20,049 me da error de compilación 554 00:24:20,049 --> 00:24:21,150 porque a esta lista 555 00:24:21,150 --> 00:24:22,349 al estar parametrizada 556 00:24:22,349 --> 00:24:24,849 a esta lista solo le puedo meter 557 00:24:24,849 --> 00:24:27,049 gastos empresariales o subclases 558 00:24:27,049 --> 00:24:28,890 y estoy intentando 559 00:24:28,890 --> 00:24:30,710 meterle algo que está declarado 560 00:24:30,710 --> 00:24:32,569 como apunte económico, claro 561 00:24:32,569 --> 00:24:34,630 pero no pasa nada porque yo sé que se 562 00:24:34,630 --> 00:24:36,589 instanció como gasto 563 00:24:36,589 --> 00:24:38,589 empresarial, entonces al haberse 564 00:24:38,589 --> 00:24:40,750 instanciado como gasto empresarial no hay ningún 565 00:24:40,750 --> 00:24:42,690 problema en que le 566 00:24:42,690 --> 00:24:43,230 haga esto 567 00:24:43,230 --> 00:24:46,369 porque ya he verificado antes 568 00:24:46,369 --> 00:24:52,359 empresarial 569 00:24:53,220 --> 00:24:56,119 ahora, vale 570 00:24:56,119 --> 00:24:58,359 ya está, y ahora ya es cuando 571 00:24:58,359 --> 00:24:59,940 uno ya se puede plantear ordenar 572 00:24:59,940 --> 00:25:14,829 ¿Vale? Porque esta lista, al ser una lista, pues tendrá un método sort, ¿vale? Y este método sort ya sabemos cómo funciona. 573 00:25:16,049 --> 00:25:25,990 ¿Los gastos empresariales tienen un criterio de ordenación definido? No lo tienen, aquí no hay ningún implements comparable. 574 00:25:25,990 --> 00:25:28,529 Tenemos dos opciones 575 00:25:28,529 --> 00:25:30,869 O aquí un implements comparable 576 00:25:30,869 --> 00:25:32,309 Porque ese es su orden natural 577 00:25:32,309 --> 00:25:33,690 Para toda la aplicación 578 00:25:33,690 --> 00:25:35,650 O hacer un comparator 579 00:25:35,650 --> 00:25:38,450 ¿Vale? Entonces 580 00:25:38,450 --> 00:25:40,150 ¿Qué decido? 581 00:25:40,470 --> 00:25:42,470 Depende, primero tengo que tener acceso 582 00:25:42,470 --> 00:25:43,690 A esta clase 583 00:25:43,690 --> 00:25:46,210 Para poder plantearme y poner aquí 584 00:25:46,210 --> 00:25:47,250 El implements comparable 585 00:25:47,250 --> 00:25:49,589 Y luego cuando lo haga 586 00:25:49,589 --> 00:25:51,369 Tengo que pensar 587 00:25:51,369 --> 00:25:53,990 Que voy a estar alterando al resto del universo 588 00:25:53,990 --> 00:25:55,250 Que esté usando esta clase 589 00:25:55,250 --> 00:25:57,650 porque automáticamente la estoy poniendo 590 00:25:57,650 --> 00:25:59,890 en un orden natural, orden descendente 591 00:25:59,890 --> 00:26:00,369 de 592 00:26:00,369 --> 00:26:02,509 importes 593 00:26:02,509 --> 00:26:05,650 y el resto del universo 594 00:26:05,650 --> 00:26:07,390 que use esa clase, cuando ordene 595 00:26:07,390 --> 00:26:09,349 cuando haga cosas, cuando haga un triset 596 00:26:09,349 --> 00:26:11,670 pues de repente va a tener ese orden 597 00:26:11,670 --> 00:26:12,809 establecido 598 00:26:12,809 --> 00:26:14,049 entonces eso 599 00:26:14,049 --> 00:26:16,970 es peligroso de hacer 600 00:26:16,970 --> 00:26:19,509 en un contexto real es peligroso, aunque aquí no 601 00:26:19,509 --> 00:26:21,450 funcione, vamos a suponer que lo 602 00:26:21,450 --> 00:26:23,450 hacemos aquí, pues esto se quedaría 603 00:26:23,450 --> 00:26:26,529 Implements comparable 604 00:26:26,529 --> 00:26:30,869 De gasto económico 605 00:26:30,869 --> 00:26:35,190 Vale, entonces al implementar 606 00:26:35,190 --> 00:26:37,009 Lo bajo aquí abajo 607 00:26:37,009 --> 00:26:41,109 Al implementar el comparable de gasto económico 608 00:26:41,109 --> 00:26:44,390 Pues necesito 609 00:26:44,390 --> 00:26:47,410 El gasto empresarial, perdón 610 00:26:47,410 --> 00:26:49,970 Perdón, perdón, perdón 611 00:26:49,970 --> 00:26:53,109 Empresarial 612 00:26:53,109 --> 00:26:54,390 Ahora sí, vale 613 00:26:54,390 --> 00:26:57,710 Ahora entonces ya necesito 614 00:26:57,710 --> 00:26:59,630 Esto 615 00:26:59,630 --> 00:27:01,410 Gasto 616 00:27:01,410 --> 00:27:02,569 Empresarial 617 00:27:02,569 --> 00:27:05,710 Empresarial 618 00:27:05,710 --> 00:27:06,549 Empresarial 619 00:27:06,549 --> 00:27:08,130 Vale 620 00:27:08,130 --> 00:27:11,430 Entonces descendente de importe 621 00:27:11,430 --> 00:27:13,710 Pues descendente de importe 622 00:27:13,710 --> 00:27:14,549 Sería 623 00:27:14,549 --> 00:27:16,250 Que o.get 624 00:27:16,250 --> 00:27:18,349 Importe 625 00:27:18,349 --> 00:27:25,869 menos 626 00:27:25,869 --> 00:27:28,009 dis.get 627 00:27:28,009 --> 00:27:29,170 importe, ¿verdad? 628 00:27:30,170 --> 00:27:31,329 Porque si esta cantidad 629 00:27:31,329 --> 00:27:33,369 es 630 00:27:33,369 --> 00:27:39,789 ahora le hacemos el casting 631 00:27:39,789 --> 00:27:41,250 entero, porque 632 00:27:41,250 --> 00:27:43,950 los importes son double, porque si esta cantidad 633 00:27:43,950 --> 00:27:44,869 es negativa 634 00:27:44,869 --> 00:27:47,509 significa que 635 00:27:47,509 --> 00:27:49,730 el importe 636 00:27:49,730 --> 00:27:52,089 de el parámetro 637 00:27:52,089 --> 00:27:53,869 es 638 00:27:53,869 --> 00:27:54,630 más pequeño 639 00:27:54,630 --> 00:27:56,809 luego va 640 00:27:56,809 --> 00:27:58,250 eso significa 641 00:27:58,250 --> 00:28:00,950 que efectivamente 642 00:28:00,950 --> 00:28:02,990 si esta cantidad es negativa estoy diciendo 643 00:28:02,990 --> 00:28:05,289 que el que llama this va el primero 644 00:28:05,289 --> 00:28:07,069 y debería ir el primero 645 00:28:07,069 --> 00:28:09,490 sí, porque su cantidad 646 00:28:09,490 --> 00:28:11,069 es mayor que esta de aquí 647 00:28:11,069 --> 00:28:11,990 es mayor 648 00:28:11,990 --> 00:28:14,410 luego ese sería el orden descendente 649 00:28:14,410 --> 00:28:17,009 da negativo cuando el que llama 650 00:28:17,009 --> 00:28:18,529 el que llama 651 00:28:18,529 --> 00:28:21,150 tiene más cantidad que el parámetro 652 00:28:21,150 --> 00:28:23,069 vale 653 00:28:23,069 --> 00:28:24,690 Lo que pasa es que como los importes son double 654 00:28:24,690 --> 00:28:26,609 Esto me va a dar en double 655 00:28:26,609 --> 00:28:29,269 Pero a mí lo que me importa es el signo de la 656 00:28:29,269 --> 00:28:30,930 De la operación 657 00:28:30,930 --> 00:28:33,349 Es lo que me importa, el signo de la operación 658 00:28:33,349 --> 00:28:34,690 Pues le hago un casting y ya está 659 00:28:34,690 --> 00:28:37,269 ¿Vale? Me importa el signo, si es negativo 660 00:28:37,269 --> 00:28:38,170 Positivo o cero 661 00:28:38,170 --> 00:28:44,420 Bueno, pues esto sería un criterio de orden 662 00:28:44,420 --> 00:28:45,599 Que hemos plantado ahí 663 00:28:45,599 --> 00:28:48,839 Que es el descendente de gastos 664 00:28:48,839 --> 00:28:55,009 Vale 665 00:28:55,009 --> 00:28:55,930 Y 666 00:28:55,930 --> 00:29:01,480 Entonces ahora esto se ordenaría 667 00:29:01,480 --> 00:29:03,559 Y ahora vamos a hacer el listado 668 00:29:03,559 --> 00:29:35,109 Y ahora aquí ya, para cada gasto empresarial de mi lista, pues listado más igual g.describir, que para eso tenemos un describir. 669 00:29:42,460 --> 00:29:45,940 Ah, bueno, que describir no te lo devolvía, te lo imprimía, te devolvía un void. 670 00:29:46,559 --> 00:29:51,599 Pues entonces lo dejamos así, le ponemos un toString y ya está. 671 00:29:52,819 --> 00:29:53,299 ¿Vale? 672 00:29:54,200 --> 00:29:56,119 Va concatenando y lo devuelve. 673 00:30:02,960 --> 00:30:05,400 Entonces haría falta un toString en gasto empresarial 674 00:30:05,400 --> 00:30:07,799 para que al concatenar uno con otro, uno con otro, 675 00:30:08,279 --> 00:30:09,740 más el salto de línea, claro, 676 00:30:12,079 --> 00:30:14,819 pues no nos quede muy feo el listado. 677 00:30:18,900 --> 00:30:22,079 Vale, vamos a ponerle un gasto empresarial aquí a este. 678 00:30:23,660 --> 00:30:24,779 O sea, un toString, perdón. 679 00:30:29,910 --> 00:30:30,750 Vale, ya está. 680 00:30:35,259 --> 00:30:36,740 A ver, ¿dónde estamos? 681 00:30:37,799 --> 00:30:38,279 Aquí. 682 00:30:39,160 --> 00:30:39,440 Vale. 683 00:30:39,440 --> 00:30:42,180 el compare to de comparable 684 00:30:42,180 --> 00:30:44,059 o el compare de comparator 685 00:30:44,059 --> 00:30:45,259 porque son la misma idea 686 00:30:45,259 --> 00:30:48,079 trabaja siempre 687 00:30:48,079 --> 00:30:49,059 con dos elementos 688 00:30:49,059 --> 00:30:51,640 que son el que llama al método 689 00:30:51,640 --> 00:30:52,140 que es dis 690 00:30:52,140 --> 00:30:55,519 y este que es o en este caso 691 00:30:55,519 --> 00:30:56,740 entonces 692 00:30:56,740 --> 00:30:58,400 te tiene que devolver 693 00:30:58,400 --> 00:31:01,380 negativo si el dis 694 00:31:01,380 --> 00:31:03,140 va antes 695 00:31:03,140 --> 00:31:04,180 que este 696 00:31:04,180 --> 00:31:06,380 cero si son 697 00:31:06,380 --> 00:31:09,180 claro claro porque es el criterio 698 00:31:09,440 --> 00:31:11,960 con el que todos lo tienen en cuenta, ¿vale? 699 00:31:12,259 --> 00:31:13,920 0 si está en la misma posición 700 00:31:13,920 --> 00:31:17,460 y positivo si el dis está después. 701 00:31:18,460 --> 00:31:19,980 Vale, pues nosotros lo que queremos es 702 00:31:19,980 --> 00:31:23,680 que cuando este esté antes, el dis esté antes, 703 00:31:24,200 --> 00:31:25,400 es porque su valor es mayor, 704 00:31:25,759 --> 00:31:27,380 porque queremos el orden descendente, ¿no? 705 00:31:27,539 --> 00:31:28,200 Pues su valor es mayor. 706 00:31:28,880 --> 00:31:30,299 Pues si nos hacemos esta resta, 707 00:31:30,980 --> 00:31:33,079 cuando el dis, su valor sea mayor, 708 00:31:33,900 --> 00:31:35,259 esta resta me va a dar negativo. 709 00:31:36,180 --> 00:31:37,859 Y cuando su valor sea menor, 710 00:31:37,859 --> 00:31:40,519 esta resta me va a dar positivo 711 00:31:40,519 --> 00:31:41,579 que es justo lo que queremos 712 00:31:41,579 --> 00:31:44,220 pues ya está, si lo quisiéramos 713 00:31:44,220 --> 00:31:45,559 en orden al revés, orden 714 00:31:45,559 --> 00:31:48,559 ascendente en vez de descendente 715 00:31:48,559 --> 00:31:50,500 cambiaríamos 716 00:31:50,500 --> 00:31:52,440 los elementos de la resta 717 00:31:52,440 --> 00:31:54,119 lo que pasa es que esta resta 718 00:31:54,119 --> 00:31:56,119 me da en double, porque son números double 719 00:31:56,119 --> 00:31:58,440 pero a mí lo que me importa es el signo de lo que me devuelve 720 00:31:58,440 --> 00:32:00,539 pues lo hago un casting a int y ya está 721 00:32:00,539 --> 00:32:02,460 y cuando sea en el mismo 722 00:32:02,460 --> 00:32:04,059 importe, luego está en la misma posición 723 00:32:04,059 --> 00:32:05,599 pues me da 724 00:32:05,599 --> 00:32:06,519 me dará cero 725 00:32:06,519 --> 00:32:10,759 nunca usaríamos este comparable 726 00:32:10,759 --> 00:32:12,619 este compare tú 727 00:32:12,619 --> 00:32:13,859 para un triset 728 00:32:13,859 --> 00:32:17,359 porque el triset entonces dos gastos 729 00:32:17,359 --> 00:32:19,240 del mismo importe le parecerían 730 00:32:19,240 --> 00:32:19,920 que son el mismo 731 00:32:19,920 --> 00:32:23,339 porque el triset este es su criterio de igualdad 732 00:32:23,339 --> 00:32:24,240 el del compare tú 733 00:32:24,240 --> 00:32:27,119 y no tiene sentido que dos gastos empresariales 734 00:32:27,119 --> 00:32:28,880 solo por tener el mismo importe 735 00:32:28,880 --> 00:32:29,420 fueran el mismo 736 00:32:29,420 --> 00:32:32,960 entonces si usáramos un triset para meter gastos empresariales 737 00:32:32,960 --> 00:32:34,980 tendríamos que hacerle a él 738 00:32:34,980 --> 00:32:36,400 un comparator por nombre 739 00:32:36,400 --> 00:32:37,960 por código 740 00:32:37,960 --> 00:32:41,339 que quiera un triset 741 00:32:41,339 --> 00:32:43,059 me preguntas ahora 742 00:32:43,059 --> 00:32:44,980 a 10 horas del examen 743 00:32:44,980 --> 00:32:47,500 pues otra implementación 744 00:32:47,500 --> 00:32:47,960 de set 745 00:32:47,960 --> 00:32:50,519 está en la grabación que pone triset 746 00:32:50,519 --> 00:32:51,240 lo tienes todo 747 00:32:51,240 --> 00:32:51,759 vale 748 00:32:51,759 --> 00:32:55,839 vale 749 00:32:55,839 --> 00:32:59,400 entonces 750 00:32:59,400 --> 00:33:01,240 y si nosotros ahora 751 00:33:01,240 --> 00:33:02,180 añadieramos aquí 752 00:33:02,180 --> 00:33:04,500 listado de gastos empresariales 753 00:33:04,500 --> 00:33:06,380 pues por ejemplo 754 00:33:06,380 --> 00:33:08,700 ahora, este mismo 755 00:33:08,700 --> 00:33:10,680 listado de gastos empresariales lo quiero 756 00:33:10,680 --> 00:33:25,160 pero por fecha, pues aquí 757 00:33:25,160 --> 00:33:26,839 de nuevo, aquí tendríamos un problema 758 00:33:26,839 --> 00:33:29,119 porque, espérate, otra vez estoy en las 759 00:33:29,119 --> 00:33:31,039 mismas, quiero un listado 760 00:33:31,039 --> 00:33:33,339 de gastos empresariales, vale, ese lo consigo 761 00:33:33,339 --> 00:33:33,980 muy rápido 762 00:33:33,980 --> 00:33:38,279 lo consigo aquí 763 00:33:38,279 --> 00:33:40,660 muy rápido, ya tengo el listado 764 00:33:40,660 --> 00:33:42,440 ahora voy a ordenarlo 765 00:33:42,440 --> 00:33:44,839 pero ahora mi orden 766 00:33:44,839 --> 00:33:50,680 mi orden ya está 767 00:33:50,680 --> 00:33:52,819 establecido, el orden natural yo ya lo he fijado 768 00:33:52,819 --> 00:33:54,819 aquí y he fijado que fuera por 769 00:33:54,819 --> 00:33:56,839 importe, como entonces 770 00:33:56,839 --> 00:33:58,799 como hago ahora para ordenar 771 00:33:58,799 --> 00:34:01,019 por otro criterio distinto 772 00:34:01,019 --> 00:34:02,799 que no sea el natural que yo he puesto 773 00:34:02,799 --> 00:34:04,900 aquí, pues ya 774 00:34:04,900 --> 00:34:07,220 sabemos como, en lugar de decirle 775 00:34:07,220 --> 00:34:08,860 null, dame mi 776 00:34:08,860 --> 00:34:10,400 criterio de ordenación, uno 777 00:34:10,400 --> 00:34:12,599 en concreto para esta ordenación 778 00:34:12,599 --> 00:34:14,840 uno en concreto, pues 779 00:34:14,840 --> 00:34:16,760 tendremos que hacernos un criterio de ordenación 780 00:34:16,760 --> 00:34:18,320 un comparator en 781 00:34:18,320 --> 00:34:20,619 particular para este sort 782 00:34:20,619 --> 00:34:22,280 que le aplique a él solamente 783 00:34:22,280 --> 00:34:25,360 Porque ya sabemos que si le pasamos null 784 00:34:25,360 --> 00:34:29,440 Entonces este sort va a tirar del que haya en la clase 785 00:34:29,440 --> 00:34:30,659 Va a tirar de este 786 00:34:30,659 --> 00:34:33,900 Entonces yo no le puedo pasar null 787 00:34:33,900 --> 00:34:36,099 Porque no quiero que tire del de la clase 788 00:34:36,099 --> 00:34:39,039 Quiero que tire de un criterio distinto que es por fechas 789 00:34:39,039 --> 00:34:44,760 Pues tendremos que pasarle un criterio 790 00:34:44,760 --> 00:34:47,280 Me tendré que hacer, que está sin hacer 791 00:34:47,280 --> 00:34:51,960 Este, pues necesito un criterio 792 00:34:51,960 --> 00:34:54,519 Comparator fechas, como yo lo quiera llamar 793 00:34:54,519 --> 00:34:56,219 Pues venga 794 00:34:56,219 --> 00:34:56,920 Vamos a hacerlo 795 00:34:56,920 --> 00:35:04,340 Pues sería esta clase 796 00:35:04,340 --> 00:35:06,800 Pues yo me la haría 797 00:35:06,800 --> 00:35:09,300 Public class comparator de fechas 798 00:35:09,300 --> 00:35:10,780 Vale 799 00:35:10,780 --> 00:35:13,119 Para que sea 800 00:35:13,119 --> 00:35:14,840 Vale 801 00:35:14,840 --> 00:35:15,579 Aquí ya 802 00:35:15,579 --> 00:35:18,599 Para que sea un comparador 803 00:35:18,599 --> 00:35:20,260 Para que sea un criterio de comparación 804 00:35:20,260 --> 00:35:21,460 Tiene que implementar 805 00:35:21,460 --> 00:35:23,699 Implements 806 00:35:23,699 --> 00:35:25,860 Tiene que implementar 807 00:35:25,860 --> 00:35:27,800 comparador 808 00:35:27,800 --> 00:35:30,340 quiero que sea yo un comparador 809 00:35:30,340 --> 00:35:32,079 entre objetos cualesquiera 810 00:35:32,079 --> 00:35:34,360 o solo entre gastos empresariales 811 00:35:34,360 --> 00:35:36,079 solo entre gastos empresariales 812 00:35:36,079 --> 00:35:37,639 pues venga 813 00:35:37,639 --> 00:35:39,639 empresarial 814 00:35:39,639 --> 00:35:40,960 parametrizalo ahí 815 00:35:40,960 --> 00:35:43,059 y ahora ya 816 00:35:43,059 --> 00:35:46,420 al ser esto una clase 817 00:35:46,420 --> 00:35:47,880 que implemente esto de aquí 818 00:35:47,880 --> 00:35:50,239 necesita sobre escribir los 819 00:35:50,239 --> 00:35:51,179 métodos, no hay otra 820 00:35:51,179 --> 00:35:54,920 que método es 821 00:35:54,920 --> 00:36:04,780 Pues este 822 00:36:04,780 --> 00:36:07,179 Este 823 00:36:07,179 --> 00:36:10,239 Me da un criterio de ordenación 824 00:36:10,239 --> 00:36:11,780 Entre estos dos parámetros 825 00:36:11,780 --> 00:36:13,340 Entre este y este otro 826 00:36:13,340 --> 00:36:15,340 Entonces ahora tenemos que pensar aquí 827 00:36:15,340 --> 00:36:17,420 ¿Cómo hacemos para que devuelva negativo 828 00:36:17,420 --> 00:36:20,099 Si la fecha de este 829 00:36:20,099 --> 00:36:21,840 Es antes que la de este otro 830 00:36:21,840 --> 00:36:24,280 Cero, bueno pues menos mal que 831 00:36:24,280 --> 00:36:26,059 Local date 832 00:36:26,059 --> 00:36:28,119 Tiene métodos para ver si una fecha 833 00:36:28,119 --> 00:36:29,079 Es antes que otra 834 00:36:29,079 --> 00:36:53,619 Vamos a ver, pues si el gasto empresarial 1 está, tendrá aquí un get date, claro, get fecha, get fecha, si la fecha del gasto empresarial 1 está después que la fecha del gasto empresarial 2, 835 00:36:53,619 --> 00:36:55,400 Si está después 836 00:36:55,400 --> 00:36:58,880 Entonces aquí me interesa devolver positivo 837 00:36:58,880 --> 00:36:59,440 ¿Verdad? 838 00:37:01,119 --> 00:37:01,840 Perdón 839 00:37:01,840 --> 00:37:02,800 O2 840 00:37:02,800 --> 00:37:06,380 Si este está después de este 841 00:37:06,380 --> 00:37:08,539 Me interesa devolver positivo 842 00:37:08,539 --> 00:37:09,260 Pues 1 843 00:37:09,260 --> 00:37:13,519 El 6 844 00:37:13,519 --> 00:37:23,920 Si en lugar de después está antes 845 00:37:23,920 --> 00:37:27,860 Tendrá un is before 846 00:37:27,860 --> 00:37:28,860 Imagino lo tiene 847 00:37:28,860 --> 00:37:31,099 Pues si está antes entonces devuelve menos 1 848 00:37:31,099 --> 00:37:32,599 Porque tiene que devolver negativo 849 00:37:32,599 --> 00:37:35,340 Si el primero está antes que el segundo 850 00:37:35,340 --> 00:37:37,659 retun-1 851 00:37:37,659 --> 00:37:40,619 y si no está antes ni después 852 00:37:40,619 --> 00:37:41,559 es la misma fecha 853 00:37:41,559 --> 00:37:43,960 en ese caso pues ahora ya sí 854 00:37:43,960 --> 00:37:55,190 vale, bueno pues 855 00:37:55,190 --> 00:37:57,090 este es un criterio de ordenación ahí suelto 856 00:37:57,090 --> 00:37:59,389 para quien lo quiera usar 857 00:37:59,389 --> 00:38:01,090 no va asociado a la clase 858 00:38:01,090 --> 00:38:03,329 es por si 859 00:38:03,329 --> 00:38:04,610 lo queremos usar en algún momento 860 00:38:04,610 --> 00:38:07,230 bueno pues este criterio de ordenación que está por aquí 861 00:38:07,230 --> 00:38:09,150 suelto, ahora ya sí 862 00:38:09,150 --> 00:38:11,110 que lo vamos a usar aquí 863 00:38:11,110 --> 00:38:15,369 Y ahora ya pues nos hacemos nuestro listado 864 00:38:15,369 --> 00:38:16,409 Otra vez como aquí 865 00:38:16,409 --> 00:38:34,719 Y aquí sigo teniendo un error rojo 866 00:38:34,719 --> 00:38:35,579 Que no sé 867 00:38:35,579 --> 00:38:38,239 Ah, por este context que tenía yo puesto aquí 868 00:38:38,239 --> 00:38:39,960 Suelto 869 00:38:39,960 --> 00:38:47,150 Vale, venga, vamos a añadir 870 00:38:47,150 --> 00:38:48,329 Otro método, por ejemplo 871 00:38:48,329 --> 00:38:50,989 Vamos a eliminar 872 00:38:50,989 --> 00:38:52,750 Todos los 873 00:38:52,750 --> 00:39:00,619 Todas las facturas de un emisor 874 00:39:00,619 --> 00:39:02,480 Todas las de un emisor fuera 875 00:39:02,480 --> 00:39:11,019 Elimina 876 00:39:11,019 --> 00:39:13,420 Facturas 877 00:39:13,420 --> 00:39:18,010 De un emisor 878 00:39:18,010 --> 00:39:19,650 Que aquí se le pase 879 00:39:19,650 --> 00:39:23,380 Pues aquí cuidado 880 00:39:23,380 --> 00:39:25,559 Vamos a eliminar de un set 881 00:39:25,559 --> 00:39:27,400 Entonces recordad 882 00:39:27,400 --> 00:39:30,400 Que uno no se plantea hacer esto 883 00:39:30,400 --> 00:39:33,869 Para cada 884 00:39:33,869 --> 00:39:36,269 Vámonos a los apuntes económicos 885 00:39:36,269 --> 00:39:37,730 Apunte 886 00:39:37,730 --> 00:39:39,869 Económico 887 00:39:41,349 --> 00:39:41,869 A 888 00:39:42,710 --> 00:39:44,969 De apuntes 889 00:39:44,969 --> 00:39:45,829 De la tentación 890 00:39:45,829 --> 00:39:46,730 Que uno tendría 891 00:39:46,730 --> 00:39:55,230 Pues si este apunte resulta que es una factura 892 00:39:55,230 --> 00:40:00,860 Y además de ser una factura 893 00:40:00,860 --> 00:40:04,219 Y además de ser una factura 894 00:40:04,219 --> 00:40:06,599 Resulta que su emisor 895 00:40:06,599 --> 00:40:12,030 Factura A 896 00:40:12,030 --> 00:40:24,010 Resulta que su emisor es igual a este que me han dado 897 00:40:24,010 --> 00:40:30,559 Resulta que es igual a este que me han dado 898 00:40:30,559 --> 00:40:32,699 pues un juego tendría tentaciones 899 00:40:32,699 --> 00:40:34,719 aquí de hacer, pues oye tú 900 00:40:34,719 --> 00:40:36,360 de apuntes 901 00:40:36,360 --> 00:40:38,099 punto remove 902 00:40:38,099 --> 00:40:42,199 esa factura, vale 903 00:40:42,199 --> 00:40:44,179 y esto es lo que hemos dicho que es muy mal 904 00:40:44,179 --> 00:40:47,659 bueno aquí antes de eso 905 00:40:47,659 --> 00:40:49,820 fijaos que aquí gracias al doble 906 00:40:49,820 --> 00:40:50,099 AND 907 00:40:50,099 --> 00:40:52,860 este casting 908 00:40:52,860 --> 00:40:55,000 no va a tener ningún problema 909 00:40:55,000 --> 00:40:57,360 porque este doble AND 910 00:40:57,360 --> 00:40:59,599 solo entra aquí 911 00:40:59,599 --> 00:41:01,420 en la segunda cláusula si esta es true 912 00:41:01,420 --> 00:41:04,119 Si es false esta ni se evalúa 913 00:41:04,119 --> 00:41:05,559 Si es false ni se evalúa 914 00:41:05,559 --> 00:41:07,380 Pero 915 00:41:07,380 --> 00:41:08,679 Si es true 916 00:41:08,679 --> 00:41:10,500 Si que se evalúa 917 00:41:10,500 --> 00:41:13,320 Y en ese caso al ser true 918 00:41:13,320 --> 00:41:14,980 Este casting tiene sentido 919 00:41:14,980 --> 00:41:17,360 Porque factura es la clase de A 920 00:41:17,360 --> 00:41:19,260 Pero bueno a lo que íbamos 921 00:41:19,260 --> 00:41:20,920 Esto recordad que es lo que no podíamos 922 00:41:20,920 --> 00:41:23,039 Estamos recorriendo la colección for remove 923 00:41:23,039 --> 00:41:25,119 A su vez otra vez va a recorrerlo 924 00:41:25,119 --> 00:41:26,940 Entonces 925 00:41:26,940 --> 00:41:29,239 Esto no fatal ya lo sabemos 926 00:41:29,239 --> 00:41:31,159 Vale 927 00:41:31,159 --> 00:41:34,719 Ya hemos visto en ejemplo 928 00:41:34,719 --> 00:41:35,280 Como 929 00:41:35,280 --> 00:41:41,500 Como nos da 930 00:41:41,500 --> 00:41:43,579 Concurrent modification exception etc 931 00:41:43,579 --> 00:41:45,019 Vale entonces aquí que hacemos 932 00:41:45,019 --> 00:41:49,340 Bueno pues el método remove ya sabemos 933 00:41:49,340 --> 00:41:51,460 Que puede borrar pero borra por igualdad 934 00:41:51,460 --> 00:41:53,619 Pero claro aquí no hay que borrar 935 00:41:53,619 --> 00:41:54,659 Por 936 00:41:54,659 --> 00:41:56,900 Igualdad de objeto 937 00:41:56,900 --> 00:41:59,500 Sino todos aquellos que su emisor sea 938 00:41:59,500 --> 00:42:01,699 Igual que este 939 00:42:01,699 --> 00:42:03,500 Y ese no es 940 00:42:03,500 --> 00:42:05,559 El criterio de igualdad del hasco 941 00:42:05,559 --> 00:42:07,860 de equals, el criterio de igualdad 942 00:42:07,860 --> 00:42:09,380 del jasco de equals es por código 943 00:42:09,380 --> 00:42:11,480 entonces aquí yo no puedo usar 944 00:42:11,480 --> 00:42:12,139 el remove 945 00:42:12,139 --> 00:42:15,780 y pasarle un objeto con un emisor 946 00:42:15,780 --> 00:42:17,019 igual a este, porque el remove 947 00:42:17,019 --> 00:42:19,360 te borra por igualdad 948 00:42:19,360 --> 00:42:20,619 de jasco de equals 949 00:42:20,619 --> 00:42:22,679 luego aquí como 950 00:42:22,679 --> 00:42:24,920 lo haríamos entonces 951 00:42:24,920 --> 00:42:27,000 que usaríamos 952 00:42:27,000 --> 00:42:30,559 para eliminar de un set 953 00:42:30,559 --> 00:42:33,019 por un criterio que no fuera el de 954 00:42:33,019 --> 00:42:34,599 clave primaria 955 00:42:34,599 --> 00:42:37,159 por un criterio que no es el de jasco de equals 956 00:42:37,159 --> 00:42:38,519 ¿qué usaríamos? 957 00:42:41,460 --> 00:42:42,739 no nos queda más remedio que usar 958 00:42:42,739 --> 00:42:43,559 ¿qué? el 959 00:42:43,559 --> 00:42:47,079 el iterador, no nos queda más remedio que usar el iterador 960 00:42:47,079 --> 00:42:48,900 para borrar 961 00:42:48,900 --> 00:42:49,699 por un criterio, bueno 962 00:42:49,699 --> 00:42:52,059 y las lambdas que no las conocemos 963 00:42:52,059 --> 00:42:56,050 para borrar por un criterio que no sea 964 00:42:56,050 --> 00:42:57,130 clave primaria 965 00:42:57,130 --> 00:43:00,469 repito, esto no lo podemos hacer 966 00:43:00,469 --> 00:43:02,170 nos va a fallar, nos va a dar 967 00:43:02,170 --> 00:43:04,289 concurrent modification exception por acceder 968 00:43:04,289 --> 00:43:06,150 por un lado por el for y luego por el remove 969 00:43:06,150 --> 00:43:07,269 que a su vez tiene dentro un for 970 00:43:07,269 --> 00:43:09,269 ¿Vale? 971 00:43:09,510 --> 00:43:11,170 Y si yo pongo un remove suelto 972 00:43:11,170 --> 00:43:13,550 A punto remove algo 973 00:43:13,550 --> 00:43:15,309 El remove suelto 974 00:43:15,309 --> 00:43:17,090 Lo que yo le pase aquí 975 00:43:17,090 --> 00:43:19,750 El remove va a buscar algo que sea 976 00:43:19,750 --> 00:43:20,949 Igualito a este 977 00:43:20,949 --> 00:43:22,250 Igualito a este 978 00:43:22,250 --> 00:43:25,909 Y la igualdad es por código 979 00:43:25,909 --> 00:43:26,829 No es por emisor 980 00:43:26,829 --> 00:43:29,670 Luego este remove suelto aquí no pinta nada 981 00:43:29,670 --> 00:43:32,250 Este remove solo me vale para borrar 982 00:43:32,250 --> 00:43:34,309 Por clave primaria 983 00:43:34,309 --> 00:43:35,409 En este caso por código 984 00:43:35,409 --> 00:43:37,030 Nunca me borraría por emisor 985 00:43:37,030 --> 00:43:38,469 Nunca me borraría por emisor 986 00:43:38,469 --> 00:43:39,869 Luego esto nada 987 00:43:39,869 --> 00:43:42,610 Vale, entonces tenemos que hacer un iterador 988 00:43:42,610 --> 00:43:43,949 Que ya sabemos 989 00:43:43,949 --> 00:43:48,449 Apuntes 990 00:43:48,449 --> 00:43:58,050 Y ahora ya 991 00:43:58,050 --> 00:44:00,230 Pues ya usamos el iterador 992 00:44:00,230 --> 00:44:01,630 Como ya sabemos usarlo 993 00:44:01,630 --> 00:44:06,280 Mientras tengamos 994 00:44:06,280 --> 00:44:07,380 Un siguiente 995 00:44:07,380 --> 00:44:08,460 En mi iterador 996 00:44:08,460 --> 00:44:14,500 Pues vamos a guardar el elemento en el que estemos 997 00:44:14,500 --> 00:44:16,579 Que es, vamos a dejarlo claro 998 00:44:16,579 --> 00:44:18,219 Apunte 999 00:44:18,219 --> 00:44:20,019 económico 1000 00:44:20,019 --> 00:44:22,539 y punto 1001 00:44:22,539 --> 00:44:24,239 next, vale, estamos aquí parados 1002 00:44:24,239 --> 00:44:26,460 vale, que 1003 00:44:26,460 --> 00:44:28,679 teníamos que hacer aquí, borrar 1004 00:44:28,679 --> 00:44:29,980 solo si es factura 1005 00:44:29,980 --> 00:44:35,289 iterator de 1006 00:44:35,289 --> 00:44:39,980 vale 1007 00:44:39,980 --> 00:44:41,980 esto a punto de 1008 00:44:41,980 --> 00:44:44,099 económico, es que se me había 1009 00:44:44,099 --> 00:44:44,320 dado 1010 00:44:44,320 --> 00:44:47,400 parametrizar, vale 1011 00:44:47,400 --> 00:44:50,139 ahora, si a 1012 00:44:50,139 --> 00:44:54,519 resulta que 1013 00:44:54,519 --> 00:45:02,429 es una instancia de factura, solo en el caso de que sea una instancia de factura, y si 1014 00:45:02,429 --> 00:45:09,590 además de ser una instancia de factura, si además de serlo, resulta que esta condición 1015 00:45:09,590 --> 00:45:26,519 de aquí, que ahora ya sí que podemos moverla, y si además de eso resulta que su emisor 1016 00:45:26,519 --> 00:45:28,559 es igual que este emisor 1017 00:45:28,559 --> 00:45:29,179 que me han dado 1018 00:45:29,179 --> 00:45:31,699 pues entonces en ese caso 1019 00:45:31,699 --> 00:45:33,199 ahora ya 1020 00:45:33,199 --> 00:45:36,539 id.remove 1021 00:45:36,539 --> 00:45:39,920 ¿vale? así si podemos 1022 00:45:39,920 --> 00:45:42,119 borrar todas las facturas 1023 00:45:42,119 --> 00:45:42,820 de un emisor 1024 00:45:42,820 --> 00:45:44,280 así si 1025 00:45:44,280 --> 00:45:47,139 ¿vale? ya se quedarían borradas 1026 00:45:47,139 --> 00:45:55,949 ¿vale?