Me continuamos, vamos a implementar el constructor por acá al insert constructor, sin argumentos,
simplemente colocamos SELECT.
No, en ninguno seleccionar ninguno quería en constructor vacío y vamos a crear la instancia, entonces
cuentas igual New Array listo, que es una implementación concreta de la interfaz list.
Acá tenemos el tipo list de cuenta, acá la implementación.
Listo.
Nada más.
Volvemos a cuenta test y ahora si ejecutamos no debiese ser NULL.
Por lo tanto, en agregar cuenta con emboca el método ADD.
Recuerden que si nos vamos al banco por acá a cuenta, invoca el lado, ya no va a lanzar el nulo de
intercepción.
De qué cuentas tiene una instancia?
Una referencia?
Vamos a probar.
Se fijan, ahora lo pasa.
Está perfecto, pero solamente tenemos la relación de banco con la cuenta.
Es decir, con sus cuentas, con sus hijos, ya tiene dos elementos.
Pero qué pasa con la relación inversa?
Es decir, con una cuenta y el banco, por ejemplo?
Recuerden que el nombre del banco, el banco del Estado.
Entonces podríamos.
Quiere probar lo siguiente?
Acerto.
Y también vamos a colocar que el valor esperado es Banco del Estado.
Tal cual Banco del Estado.
Se fijan lo mismo.
Banco del Estado acá.
Banco el Estado acá.
Pero este nombre lo vamos a tener.
La relación inversa de la cuenta 1.
Por ejemplo, o la cuenta 2 da lo mismo.
Cuenta 1 punto guet banco punto nyet.
Nombre a la cuenta 1 le invocamos el banco.
La relación inversa y el nombre banco debería ser eso no es cierto?
Pero va a fallar.
Lo vamos a levantar y debiese dar un error.
Bueno, el partido nulo en 3 actos también, porque banco en nulo, es decir, en cuenta en las cuentas
no tenemos la relación inversa, se fijan y tenemos problema que tengo que solucionar.
Implementando este proceso unitaria nos damos cuenta donde están estos errores.
Entonces la solución es ir a banco por acá una forma nos vamos a ir al método agregar cuenta y acá mismo
podemos establecer esta relación bidireccional o inversa y super simple sería de cuenta.
Punto set banco.
Es decir, a cada cuenta que se agrega en la clase, en el objeto banco le agregamos el banco en cuestión,
el mismo banco.
Entonces colocamos 10, se fijan, hace clic, agregamos una cuenta, le pasamos la misma referencia
del banco a cada cuenta y ahí tenemos el banco con this.
Entonces revolvemos, cuenta test y probamos y debería pasar.
Perfecto, ahora podríamos traja con el API Stream a través del banco, obtener una cuenta y validar
que esa cuenta pertenezca a un cierto nombre, a una cierta persona.
Por ejemplo, Andrés.
Cómo lo podríamos hacer?
Bueno, hacer y cuál es?
Voy a esperar que sea Andrés, por ejemplo.
Ese es mi valor esperado.
Coma.
Pero vamos a partir no de la cuenta, sino del banco.
Vamos a comprobar que el banco tiene una cuenta con nombre Andrés Banco.
Punto.
Qué cuentas?
Pero qué cuentas?
Es una lista.
Y esta lista la vamos a trasformar en un stream que es un API de Java 8 TONCE stream.
El método stream acá se convierte en una corriente.
Punto.
Vamos a filtrar.
Acá tenemos el método filter filter y acá se tienen que evaluar una prisión booleana por cada elemento
del stream.
Bueno, también de la lista obtenemos el objeto.
Los elementos son del tipo cuenta.
Le vamos a merced de cuenta.
Y acá una prisión lanta flecha y una prisión booleana.
Entonces que sé.
Punto.
Qué persona perfecto!
Punto.
Equals a este valor esperado.
Es decir.
Andrés Andrés.
Si vamos a comparar que existe efectivamente este valor esperado en la lista el stream, entonces si
existe lo va a filtrar y vamos a tener un stream de un solo elemento y lo vamos a obtener con el método
Find First.
Por acá lo tenemos.
Buscar primero Find first.
Y eso devuelve un optional que también es de Java 8.
Voy a ordenar un poco.
Por ejemplo, acabo de bajar en Filter, bajamos en Filter, acá tenemos el filtro, bajamos en Find
First y acá bajamos otro más y con el método GET lo obtenemos.
Acá, acá tenemos el geto.
Obtenemos el objeto.
Cuenta.
Punto.
Qué persona llega?
Obtenemos el string.
Obtenemos electrificar.
Acá no se preocupen true warning.
Aunque también podríamos preguntar si está presente evaluar, pero eso lo podríamos dejar para otro
test.
Y esto debería pasar porque ya tenemos la relación inversa.
Vamos a levantar.
Vamos a probar.
Y pasa la prueba.
Encuentra Andrés.
Así que está bien.
De hecho, podríamos preguntar si está presente, pero con un hacer thru evaluar que efectivamente sea
true el presente.
Bueno, y eso sería otro test similar a este.
De hecho lo voy a copiar porque sería muy parecido, pero thru hacer thru.
Por acá cambiamos thru.
Esto lo quitamos y solamente evaluamos todo acá, pero un poco distinto.
Es decir, obtenemos la persona, la filtramos y en vez de guet, en vez de obtener invocar el método
gué persona para comparar con el valor esperado con 3.
Simplemente es toda cacería y se presenta.
Se está presenta y después vamos a ver que tenemos otra variante, pero bueno, lo vamos a ejecutar.
Levantamos y está correcto.
Se fijan.
Y otra variante en una sola línea, en vez de tener find first punto y expresen.
Simplemente quitamos el fin first henny match.
Y colocamos esto acá.
Pero se flecha y pegamos.
Pero incluso esto se reemplaza por el filtro.
Es decir, quitamos esto y dejamos solamente en Limache a pie Stream se encuentra.
Hay algún match con Andrés?
Perfecto.
Devuelve otro y lo encuentra.
Se fijan mucho más simple.
De esta crisis que tenemos probada la relación inversa en ambos sentidos, incluso de tres forma primero
el banco con las cuentas, con sus cuentas, después una cuenta en particular con el banco que coincida
y después el banco con una cuenta en cuestión.
Por ejemplo, en 3 también podríamos probar la de Yondu.
Por ejemplo, copiamos acá.
Y la pegamos acá.
Probamos si está Johnno.
Ejecutamos.
También para qué bases si colocamos el H acá, cambiamos el orden de Laucha y levantamos.
Fools con el H después de la O. nos encuentra, pero si antes se fijan, está bien.
Lo dejamos así.
Entonces, para finalizar, en este hacer equals obtenemos las cuentas, la convertimos de una lista
a un stream de ya 8 filtramos PokÃmon por 3 obtenemos 3 con el fin FERT, es decir, lo convertimos
de un stream a un tipo optional y le invocamos el GET para obtener el objeto cuenta.
No quiero entrar en detalles del API optional, ni tampoco el API stream, porque un tema muy extenso.
Luego invocamos persona del tipo String y lo comparamos con esto y listo.
Ahí tenemos nada más.
Continuamos en la siguiente clase.