1
00:00:00,120 --> 00:00:00,780
Continuamos?

2
00:00:00,840 --> 00:00:06,180
Veamos otro ejemplo bueno, partiendo de este mismo, pero bucar de forma recursiva, es decir, buscar

3
00:00:06,180 --> 00:00:08,460
por nombre, ya sé, directorio o un archivo.

4
00:00:08,610 --> 00:00:09,630
Cómo lo podemos implementar?

5
00:00:09,780 --> 00:00:11,070
Hay que hacer un par de cambio.

6
00:00:11,130 --> 00:00:15,060
Por ejemplo, agregar otro método recursivo en la clase componente.

7
00:00:15,660 --> 00:00:23,820
Acá ya tenemos el método mostrar, pero también tendríamos que tener este método abstracta public y

8
00:00:23,880 --> 00:00:30,210
va a devolver un bullían buscar por un nombre de string.

9
00:00:31,890 --> 00:00:35,730
Bien, obviamente acá va a marcar errores, claro, porque tengo que implementar este método que es

10
00:00:35,730 --> 00:00:39,030
abstracto en archivo y también en directorio.

11
00:00:39,320 --> 00:00:42,610
Bien, entonces vamos a comenzar primero en archivo, que mucho más simple.

12
00:00:42,790 --> 00:00:48,170
Entonces, sobre la clase por acá implementamos el método Busscar ok?

13
00:00:49,210 --> 00:00:51,180
Y que preguntamos su nombre?

14
00:00:52,200 --> 00:00:53,280
Nombre, punto.

15
00:00:53,340 --> 00:00:53,490
Y.

16
00:00:54,330 --> 00:00:58,650
Incluso Pudiesse con equals y Noctis independientes en mayúscula o minúscula.

17
00:00:58,960 --> 00:00:59,880
Bueno, da lo mismo.

18
00:00:59,970 --> 00:01:00,990
Y acá pasamos nombre.

19
00:01:02,190 --> 00:01:03,600
Pero qué vamos a tener un problema?

20
00:01:03,900 --> 00:01:05,640
Claro, porque acá tenemos nombre.

21
00:01:05,670 --> 00:01:07,260
Pero el atributo también se llama nombre.

22
00:01:07,380 --> 00:01:11,040
Se fijan nombre de la clase componente protected.

23
00:01:11,820 --> 00:01:18,160
Entonces, para diferenciar entre un nombre de argumento con un nombre atributo como siempre dice ahí

24
00:01:18,240 --> 00:01:24,540
si entonces dice nombre, el atributo si es igual al parámetro nombre sea igual lo encontramos pero

25
00:01:24,660 --> 00:01:25,380
en el archivo.

26
00:01:25,560 --> 00:01:28,350
Ahora lo tengo que implementar de forma recursiva en directorio.

27
00:01:28,980 --> 00:01:31,950
Lo mismo sobre la clase implementar método.

28
00:01:32,790 --> 00:01:33,210
Ok.

29
00:01:34,080 --> 00:01:38,970
Bueno, lo primero es preguntar por el nombre del directorio actual en cuestión con el equals.

30
00:01:39,120 --> 00:01:43,620
Antes de entrar a los recursivos, antes de preguntar hijo por hijo, claro, porque ese directorio

31
00:01:43,620 --> 00:01:45,810
se llama igual que el nombre lo encontramos.

32
00:01:46,020 --> 00:01:47,880
No es necesario que tenga que recorre sus hijos.

33
00:01:48,180 --> 00:01:54,210
Entonce if lo mismo dice nombre punto.

34
00:01:54,300 --> 00:01:55,460
Y cuál es inor?

35
00:01:55,510 --> 00:01:56,670
Qué es nombre?

36
00:01:58,820 --> 00:02:02,940
Si es igual, retonto, bien.

37
00:02:02,970 --> 00:02:04,140
Pero si no lo encuentra.

38
00:02:04,230 --> 00:02:06,330
Bueno, hay tenemos que recorrer de forma recursiva.

39
00:02:06,660 --> 00:02:14,820
Entonces podríamos utilizar utilizando for recorremos los hijos del tipo componente hijo.

40
00:02:15,090 --> 00:02:16,740
2.O hijos.

41
00:02:20,010 --> 00:02:26,930
Entonces por cada uno preguntamos entonces si if hijo punto buscar de origen.

42
00:02:27,120 --> 00:02:32,010
Ahí estamos invocando de forma recursiva el método buscar, pero en el hijo y acá pasamos el nombre.

43
00:02:33,180 --> 00:02:36,630
Entonces si el buscar del hijo devuelve true es porque no encontró.

44
00:02:40,170 --> 00:02:40,650
Y listo.

45
00:02:40,980 --> 00:02:41,830
Ahí lo tenemos implementado.

46
00:02:41,940 --> 00:02:46,800
Entonces el primero pregunta válida por el mismo directorio, por el nombre del directorio actual.

47
00:02:47,340 --> 00:02:50,640
Y si no itera por los hijos y pregunta uno por uno.

48
00:02:50,760 --> 00:02:55,050
Si buscar de algún hijo devuelve true no encontró y se sale el método no encontrado.

49
00:02:55,260 --> 00:02:56,490
De lo contrario, fols.

50
00:02:56,640 --> 00:02:58,720
Veamos el ejemplo porque ya lo teníamos implementado.

51
00:02:58,880 --> 00:02:59,940
Entonces nos vamos acá.

52
00:03:00,000 --> 00:03:01,380
Ejemplo vamos a copiar.

53
00:03:01,440 --> 00:03:02,610
Ejemplo Composite.

54
00:03:03,000 --> 00:03:04,820
Lo pegamos en ejemplo.

55
00:03:06,950 --> 00:03:09,980
Buscar para no modificaré, que ya tenemos.

56
00:03:10,340 --> 00:03:12,050
Entonces nos vamos acá a buscar.

57
00:03:13,580 --> 00:03:15,860
Esto acá lo podemos comentar o lo quitamos.

58
00:03:16,400 --> 00:03:18,470
Da lo mismo, ya tenemos la estructura base.

59
00:03:18,680 --> 00:03:25,340
Entonces vamos a preguntar bullían encontrado igual Doc?

60
00:03:26,030 --> 00:03:26,840
Punto buscar.

61
00:03:27,260 --> 00:03:28,670
Recuerden que Doc es la raíz.

62
00:03:29,030 --> 00:03:30,170
Vamos a buscar por algún nombre.

63
00:03:30,170 --> 00:03:34,350
Por ejemplo, busquemos por patrón composite doc.

64
00:03:34,760 --> 00:03:35,300
Esto acá.

65
00:03:35,480 --> 00:03:36,230
Este mismo nombre.

66
00:03:36,440 --> 00:03:37,850
No sé, para no equivocarme.

67
00:03:37,940 --> 00:03:40,880
Lo voy a copiar y lo pegamos acá.

68
00:03:43,140 --> 00:03:52,250
Shout encontrado en dos punto más encontrado.

69
00:03:53,550 --> 00:03:54,150
Vamos a ver.

70
00:03:58,030 --> 00:04:00,150
Encontrado thru así que está funcionando.

71
00:04:01,480 --> 00:04:02,800
Busquemos por algún directorio.

72
00:04:04,220 --> 00:04:08,030
Bajamos encontrado igual Doc.

73
00:04:08,330 --> 00:04:17,840
Punto buscar siempre desde la raíz de donde parte, por ejemplo API stream el directorio stream

74
00:04:20,450 --> 00:04:28,370
shout encontrado tap stream 2 punto.

75
00:04:31,010 --> 00:04:31,550
Vamos a ver.

76
00:04:36,190 --> 00:04:42,910
Truth también, ahora si colocamos, por ejemplo API Xilda a stream mal escrito.

77
00:04:51,510 --> 00:04:53,820
Encontrado igual doc?

78
00:04:54,030 --> 00:04:57,680
Punto buscar por ejemplo, podría ser?

79
00:04:58,610 --> 00:04:59,070
Destacan.

80
00:05:11,390 --> 00:05:11,960
Vamos a ver.

81
00:05:16,720 --> 00:05:17,110
Doc.

82
00:05:21,400 --> 00:05:24,130
Fours, entonces funciona perfecto de forma recursiva.

83
00:05:24,520 --> 00:05:25,840
Ahora, cómo se podría mejorar?

84
00:05:25,930 --> 00:05:30,550
Claro, porque lo estamos implementando en directorio con un foro de forma normal.

85
00:05:30,850 --> 00:05:33,880
Qué pasa si lo modificamos y lo dejamos con el API Stream?

86
00:05:34,600 --> 00:05:36,070
Bueno, va a ser mucho mejor.

87
00:05:37,800 --> 00:05:43,650
Lo voy a comentar o lo voy a quitar en el caso de coméntalo para que lo tengan, pero yo lo voy a quitar.

88
00:05:44,020 --> 00:05:44,300
Listo.

89
00:05:44,340 --> 00:05:46,380
Entonces lo vamos a modificar en vez de fols.

90
00:05:46,590 --> 00:05:50,220
Va a ser hijos Punto Stream.

91
00:05:50,580 --> 00:05:54,540
Recuerden que es una lista del tipo list, una implementación de ArrayList.

92
00:05:54,600 --> 00:05:58,260
Por lo tanto, tenemos el método stream para convertir a un flujo.

93
00:05:58,710 --> 00:05:59,400
Punto.

94
00:05:59,490 --> 00:06:05,280
Vamos a utilizar el operador en match n match un predicado.

95
00:06:05,580 --> 00:06:08,730
Recuerden que acá se emite cada elemento, cada hijo.

96
00:06:09,050 --> 00:06:16,260
Luego vamos a colocar H de hijo la flecha y el predicado que existe en nuestra expresión.

97
00:06:16,260 --> 00:06:17,910
Landa con alguna expresión plena.

98
00:06:18,120 --> 00:06:19,170
Hijo H.

99
00:06:19,410 --> 00:06:20,040
Punto.

100
00:06:20,100 --> 00:06:22,140
Busscar nombre.

101
00:06:24,110 --> 00:06:26,270
Se fija en una sola línea con el lápiz Trim.

102
00:06:27,020 --> 00:06:27,710
Mucho mejor.

103
00:06:28,880 --> 00:06:29,970
Ahí tenemos implementó el método.

104
00:06:30,050 --> 00:06:31,160
Entonces lo vamos a probar.

105
00:06:31,610 --> 00:06:37,950
Nos vamos a ejemplo composite buscar y recuerden truth true fols.

106
00:06:38,210 --> 00:06:39,260
Ah, pero acá.

107
00:06:40,450 --> 00:06:42,280
Le pusimos X, así que iba a ser Trum.

108
00:06:43,530 --> 00:06:44,040
Vamos a ver.

109
00:06:46,950 --> 00:06:47,670
Truth, truth!

110
00:06:48,780 --> 00:06:50,970
Ahora si les quitamos la X en abstencion.

111
00:06:53,870 --> 00:06:54,530
Va a ser fors.

112
00:06:55,450 --> 00:06:56,110
No lo encuentra.

113
00:06:56,170 --> 00:06:58,120
Si acá le quitamos la a?

114
00:07:00,760 --> 00:07:01,950
Va a ser fols acá.

115
00:07:02,920 --> 00:07:03,640
No, que tontera.

116
00:07:03,710 --> 00:07:04,510
Acá, perdón.

117
00:07:05,590 --> 00:07:05,970
S.

118
00:07:08,310 --> 00:07:11,130
distracciÃn Ahora sí va a ser Fors.

119
00:07:12,760 --> 00:07:13,690
Así que está funcionando bien.

120
00:07:14,810 --> 00:07:18,220
Buscamos como estaba búsqueda recursiva con el patrón Composi.

121
00:07:18,340 --> 00:07:18,910
Nada más.

122
00:07:19,000 --> 00:07:20,740
Nos vemos en la siguiente clase.
