Continuamos?
Veamos otro ejemplo bueno, partiendo de este mismo, pero bucar de forma recursiva, es decir, buscar
por nombre, ya sé, directorio o un archivo.
Cómo lo podemos implementar?
Hay que hacer un par de cambio.
Por ejemplo, agregar otro método recursivo en la clase componente.
Acá ya tenemos el método mostrar, pero también tendríamos que tener este método abstracta public y
va a devolver un bullían buscar por un nombre de string.
Bien, obviamente acá va a marcar errores, claro, porque tengo que implementar este método que es
abstracto en archivo y también en directorio.
Bien, entonces vamos a comenzar primero en archivo, que mucho más simple.
Entonces, sobre la clase por acá implementamos el método Busscar ok?
Y que preguntamos su nombre?
Nombre, punto.
Y.
Incluso Pudiesse con equals y Noctis independientes en mayúscula o minúscula.
Bueno, da lo mismo.
Y acá pasamos nombre.
Pero qué vamos a tener un problema?
Claro, porque acá tenemos nombre.
Pero el atributo también se llama nombre.
Se fijan nombre de la clase componente protected.
Entonces, para diferenciar entre un nombre de argumento con un nombre atributo como siempre dice ahí
si entonces dice nombre, el atributo si es igual al parámetro nombre sea igual lo encontramos pero
en el archivo.
Ahora lo tengo que implementar de forma recursiva en directorio.
Lo mismo sobre la clase implementar método.
Ok.
Bueno, lo primero es preguntar por el nombre del directorio actual en cuestión con el equals.
Antes de entrar a los recursivos, antes de preguntar hijo por hijo, claro, porque ese directorio
se llama igual que el nombre lo encontramos.
No es necesario que tenga que recorre sus hijos.
Entonce if lo mismo dice nombre punto.
Y cuál es inor?
Qué es nombre?
Si es igual, retonto, bien.
Pero si no lo encuentra.
Bueno, hay tenemos que recorrer de forma recursiva.
Entonces podríamos utilizar utilizando for recorremos los hijos del tipo componente hijo.
2.O hijos.
Entonces por cada uno preguntamos entonces si if hijo punto buscar de origen.
Ahí estamos invocando de forma recursiva el método buscar, pero en el hijo y acá pasamos el nombre.
Entonces si el buscar del hijo devuelve true es porque no encontró.
Y listo.
Ahí lo tenemos implementado.
Entonces el primero pregunta válida por el mismo directorio, por el nombre del directorio actual.
Y si no itera por los hijos y pregunta uno por uno.
Si buscar de algún hijo devuelve true no encontró y se sale el método no encontrado.
De lo contrario, fols.
Veamos el ejemplo porque ya lo teníamos implementado.
Entonces nos vamos acá.
Ejemplo vamos a copiar.
Ejemplo Composite.
Lo pegamos en ejemplo.
Buscar para no modificaré, que ya tenemos.
Entonces nos vamos acá a buscar.
Esto acá lo podemos comentar o lo quitamos.
Da lo mismo, ya tenemos la estructura base.
Entonces vamos a preguntar bullían encontrado igual Doc?
Punto buscar.
Recuerden que Doc es la raíz.
Vamos a buscar por algún nombre.
Por ejemplo, busquemos por patrón composite doc.
Esto acá.
Este mismo nombre.
No sé, para no equivocarme.
Lo voy a copiar y lo pegamos acá.
Shout encontrado en dos punto más encontrado.
Vamos a ver.
Encontrado thru así que está funcionando.
Busquemos por algún directorio.
Bajamos encontrado igual Doc.
Punto buscar siempre desde la raíz de donde parte, por ejemplo API stream el directorio stream
shout encontrado tap stream 2 punto.
Vamos a ver.
Truth también, ahora si colocamos, por ejemplo API Xilda a stream mal escrito.
Encontrado igual doc?
Punto buscar por ejemplo, podría ser?
Destacan.
Vamos a ver.
Doc.
Fours, entonces funciona perfecto de forma recursiva.
Ahora, cómo se podría mejorar?
Claro, porque lo estamos implementando en directorio con un foro de forma normal.
Qué pasa si lo modificamos y lo dejamos con el API Stream?
Bueno, va a ser mucho mejor.
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.
Listo.
Entonces lo vamos a modificar en vez de fols.
Va a ser hijos Punto Stream.
Recuerden que es una lista del tipo list, una implementación de ArrayList.
Por lo tanto, tenemos el método stream para convertir a un flujo.
Punto.
Vamos a utilizar el operador en match n match un predicado.
Recuerden que acá se emite cada elemento, cada hijo.
Luego vamos a colocar H de hijo la flecha y el predicado que existe en nuestra expresión.
Landa con alguna expresión plena.
Hijo H.
Punto.
Busscar nombre.
Se fija en una sola línea con el lápiz Trim.
Mucho mejor.
Ahí tenemos implementó el método.
Entonces lo vamos a probar.
Nos vamos a ejemplo composite buscar y recuerden truth true fols.
Ah, pero acá.
Le pusimos X, así que iba a ser Trum.
Vamos a ver.
Truth, truth!
Ahora si les quitamos la X en abstencion.
Va a ser fors.
No lo encuentra.
Si acá le quitamos la a?
Va a ser fols acá.
No, que tontera.
Acá, perdón.
S.
distracciÃn Ahora sí va a ser Fors.
Así que está funcionando bien.
Buscamos como estaba búsqueda recursiva con el patrón Composi.
Nada más.
Nos vemos en la siguiente clase.