1
00:00:00,180 --> 00:00:00,690
Bienvenidos.

2
00:00:00,720 --> 00:00:03,650
Continuamos con la programación funcional y prisión en Holanda.

3
00:00:03,760 --> 00:00:09,600
Bueno, ya hemos estado trabajando con esto desde lo drid, por ejemplo con Ranavalona, con Calabuig

4
00:00:09,630 --> 00:00:10,170
también.

5
00:00:10,260 --> 00:00:15,660
Por ejemplo, cuando pasamos una prisión, Landa una implementación de un método al vuelo se guardan,

6
00:00:15,720 --> 00:00:21,990
por ejemplo, en el constructor de un Tried para pasar un rappel o también en el ejecutor servis en

7
00:00:21,990 --> 00:00:25,470
el método Submit para enviar a ejecución alguna tarea.

8
00:00:25,560 --> 00:00:26,340
Pero no solamente eso.

9
00:00:26,370 --> 00:00:32,490
También hemos trabajado con el prisionero Landau en el método foreach del API de colisión de Yaba.

10
00:00:32,610 --> 00:00:38,460
En las listas, por ejemplo, por cada elemento, pudiéramos implementar una función de flecha o expresión

11
00:00:38,460 --> 00:00:40,620
lanta para hacer algo con cada elemento.

12
00:00:40,650 --> 00:00:41,460
Alguna tarea?

13
00:00:41,610 --> 00:00:45,510
Un consumidor como se le conoce, pero también con el comparador comparable.

14
00:00:45,600 --> 00:00:47,160
Es decir, hemos estado trabajando con esto.

15
00:00:47,220 --> 00:00:52,710
Ahora lo que vamos a hacer es aterrizar un poco más y presentarlo de forma más formal y una forma un

16
00:00:52,710 --> 00:00:53,380
poco más ágil.

17
00:00:53,490 --> 00:00:58,620
Quería evitar tener que hacer una presentación porque la verdad, en este caso mucho más simple que

18
00:00:58,620 --> 00:01:01,800
lo vayamos codificando y explicando paso a paso en el código.

19
00:01:02,010 --> 00:01:06,210
Aunque insisto, ya hemos trabajado con esto, así que va a ser bastante simple.

20
00:01:06,480 --> 00:01:13,170
Bien en Yaba o desde ya 8 porque es una característica que se viene a incluir en el JDK desde la versión

21
00:01:13,230 --> 00:01:14,330
8 en adelante.

22
00:01:14,370 --> 00:01:17,220
Controles y programación funcional presiona el lambda.

23
00:01:17,280 --> 00:01:23,760
Todo lo que es el API Stream o de flujos en Java que después vamos a ver que trabaja en base a esta

24
00:01:23,760 --> 00:01:29,760
programación funcional a estas expresiones lanta y va trae ver ese tipo de expresiones lande que podemos

25
00:01:29,760 --> 00:01:36,240
utilizar no solamente el Ranavalona, el compared to comparable el Clavell, sino también entre varios

26
00:01:36,240 --> 00:01:37,710
más que vamos a ver ahora.

27
00:01:37,800 --> 00:01:39,210
Por ejemplo el Consumer.

28
00:01:39,240 --> 00:01:42,720
Un consumidor es su player, que es un proveedor.

29
00:01:42,960 --> 00:01:46,530
Vamos a ver el fant chón, una función que es una prisión blanda.

30
00:01:46,740 --> 00:01:53,700
El predicaste también otra prisión lanta para trabajar con booleanos con alguna expresión de verdad.

31
00:01:53,880 --> 00:01:54,900
Comparadores lógicos.

32
00:01:55,050 --> 00:02:00,330
Antes de comenzar con el ejemplo, definamos lo que es una presión lenda es super simple, es implementar

33
00:02:00,330 --> 00:02:03,570
un método sin necesidad de implementar una clase.

34
00:02:03,780 --> 00:02:06,390
Es decir, implementamos este método al vuelo.

35
00:02:06,600 --> 00:02:10,200
También se le conoce como función o método de flecha.

36
00:02:10,410 --> 00:02:10,950
Recuerden.

37
00:02:11,040 --> 00:02:12,570
Y esto viene a través de la interfaz.

38
00:02:12,690 --> 00:02:19,260
Es decir, al final una prisión Landas se traduce a una interfaz funcional con un solo método abstracto

39
00:02:19,380 --> 00:02:22,290
que tenemos que implementar y lo implementamos al vuelo.

40
00:02:22,380 --> 00:02:23,370
Por eso es anónimo.

41
00:02:23,580 --> 00:02:28,680
No requiere tener una clase para poder implementar este método, mismo concepto que una clase anónima.

42
00:02:28,800 --> 00:02:34,770
Cuando se crea esta clase anónima a partir de la interfaz al vuelo es lo mismo, pero acá con un solo

43
00:02:34,770 --> 00:02:36,330
método, bien, vamos a trabajar.

44
00:02:36,420 --> 00:02:37,530
Entonces vamos a cerrar.

45
00:02:37,680 --> 00:02:40,590
Cerramos todo en Realia con file se proyecto.

46
00:02:40,710 --> 00:02:42,390
Vamos a crear un nuevo proyecto.

47
00:02:42,570 --> 00:02:49,110
Le vamos a llamar bueno siguiente siguiente llaba 8 lanta y finalizamos.

48
00:02:50,380 --> 00:02:52,060
Bien, vamos a crear el pacato.

49
00:02:52,420 --> 00:02:53,920
En ese recé como siempre.

50
00:02:55,260 --> 00:03:06,700
New empacas para horden or Deimos siempre or a Guzmán ya 8.a Landa o lo que quieran.

51
00:03:06,960 --> 00:03:07,980
Oh, qué bien!

52
00:03:08,790 --> 00:03:16,490
Y comenzamos con una clase con el método main ejemplo consumer consumidor.

53
00:03:16,680 --> 00:03:17,700
Bien con el método de.

54
00:03:21,250 --> 00:03:28,540
Para comenzar, no es la primera impresión blanda es Consumer, entonces con Summer lo importamos de

55
00:03:28,540 --> 00:03:35,770
lleba útil Antxón una función una empresa en Landau que utiliza genérico un tipo, pues se wye cosa

56
00:03:35,950 --> 00:03:43,350
de una clase de un stream por ejemplo, o de un tipo numérico, lo que sea, le vamos a llamar consumidor.

57
00:03:44,650 --> 00:03:54,280
Igual por poner un ejemplo, puede colocar saludo, un mensaje, saludo, una flecha y shout saludo.

58
00:03:55,630 --> 00:03:56,710
Bien, ahí lo tenemos.

59
00:03:56,980 --> 00:03:57,760
De qué se trata?

60
00:03:58,010 --> 00:03:58,270
Bien.

61
00:03:58,360 --> 00:04:06,190
Consumer es una expresión landa que nos permite pasar por argumento un solo parámetro del tipo del genérico.

62
00:04:06,340 --> 00:04:10,840
En este caso saludo del tipo string porque lo estamos definiendo acá, pero podría ser cualquier otra

63
00:04:10,840 --> 00:04:11,230
cosa.

64
00:04:11,920 --> 00:04:13,420
Y dentro este método.

65
00:04:13,480 --> 00:04:14,890
Por eso esta flecha.

66
00:04:15,010 --> 00:04:19,870
Acá podemos implementar lo que queramos o hacer algo con esto que estamos pasando por argumento.

67
00:04:20,050 --> 00:04:20,680
Lleveis.

68
00:04:20,830 --> 00:04:22,810
El método no devuelve nada.

69
00:04:22,960 --> 00:04:26,290
Al final es un consumidor del parámetro del método.

70
00:04:26,530 --> 00:04:27,280
Ese concepto.

71
00:04:27,430 --> 00:04:32,890
Entonces consumimos este argumento, este parámetro de un tipo dato cualquiera y hacemos algo lo que

72
00:04:32,890 --> 00:04:33,340
queramos.

73
00:04:33,400 --> 00:04:38,290
Como ya hemos venido viendo, explicando porque también lo he mencionado, ahora lo voy a repetir un

74
00:04:38,290 --> 00:04:38,770
poco.

75
00:04:38,890 --> 00:04:44,890
Cuando tenemos una persona blanda y tenemos una sola línea de código, se puede omitir la llaves, pero

76
00:04:44,890 --> 00:04:47,650
al final podríamos tener acá unas llaves.

77
00:04:48,340 --> 00:04:53,020
Se fijan voy a bajar acá, voy a bajar y acá el punto y coma.

78
00:04:53,560 --> 00:04:55,600
Acá estamos haciendo algo con este saludo.

79
00:04:55,720 --> 00:04:56,470
Qué estamos haciendo?

80
00:04:56,470 --> 00:04:57,340
Lo estamos imprimiendo.

81
00:04:57,400 --> 00:05:02,560
Pero también podríamos hacer una infinidad de cosas que queramos o que necesitemos implementar.

82
00:05:02,770 --> 00:05:08,020
Así como es un string, también podría ser un dato fecha de ya útil.

83
00:05:08,080 --> 00:05:15,400
Por ejemplo, acá se pasa la fecha y acá se imprime la fecha, incluso la fecha.

84
00:05:15,460 --> 00:05:21,430
Podría tener algún tipo de formato, le podríamos dar un formato con simple dato formato

85
00:05:25,360 --> 00:05:29,800
formato igual new y acá un patrón.

86
00:05:29,860 --> 00:05:30,490
Se acuerdan?

87
00:05:30,610 --> 00:05:36,100
Por ejemplo el año, el mes en mayúscula y el día.

88
00:05:37,630 --> 00:05:38,970
Y acá sería F.

89
00:05:40,300 --> 00:05:41,770
Punto formato.

90
00:05:43,340 --> 00:05:44,540
Y pasamos el objeto fecha.

91
00:05:47,800 --> 00:05:52,660
Bueno, si ejecuto esto, obviamente no sucede nada, porque solamente estamos implementando este método,

92
00:05:53,110 --> 00:05:53,800
vamos a revisar.

93
00:05:55,250 --> 00:05:56,060
No pasa nada.

94
00:05:56,570 --> 00:05:56,840
Nada.

95
00:05:57,140 --> 00:06:02,510
Entonces, para que suceda algo es con la implementación e con el objeto consumidor.

96
00:06:02,690 --> 00:06:06,080
Consumer Consumidor punto.

97
00:06:06,170 --> 00:06:06,740
Acepto.

98
00:06:08,560 --> 00:06:09,370
Y acá pasamos.

99
00:06:13,440 --> 00:06:14,970
New Date.

100
00:06:15,780 --> 00:06:16,470
La fecha actual.

101
00:06:17,600 --> 00:06:20,730
Y ahora ejecutamos y se imprimir la fecha de formato.

102
00:06:20,790 --> 00:06:22,850
Esta es la fecha actual 20.

103
00:06:22,950 --> 00:06:28,020
Se fijan entonces por detrás de escena una person lanta se traduce a un interfaz funcional.

104
00:06:28,230 --> 00:06:35,700
De hecho, control click en Consumer Llegá es una interfaz funcional funcional interfaz tiene esta notación,

105
00:06:35,790 --> 00:06:39,750
aunque es opcional, pero solamente tiene un método abstracto sin implementar.

106
00:06:40,080 --> 00:06:41,100
Voy a Set.

107
00:06:41,370 --> 00:06:42,780
Y qué recibe el genérico?

108
00:06:43,050 --> 00:06:47,040
El tipo de dato que se pasa por argumento y que queremos consumir.

109
00:06:47,250 --> 00:06:53,040
Implementar alguna tarea podría tener más métodos, pero da lo mismo método de foll o estático no hay

110
00:06:53,040 --> 00:06:59,130
ningún problema, pero un solo método sin implementar un solo método en este caso abstracto.

111
00:07:00,960 --> 00:07:05,960
Y utiliza, por supuesto, genéricos para que no solamente lo puedo implementar con TEPT, sino con

112
00:07:05,960 --> 00:07:06,650
lo que queramos.

113
00:07:07,310 --> 00:07:14,360
Bien por defecto, el Consumer acepta un solo argumento el método uno solo y no devuelve nada.

114
00:07:14,540 --> 00:07:20,270
Pero también podríamos tener un consumidor, un consumer que tenga dos argumentos en el método y trabajar

115
00:07:20,330 --> 00:07:22,910
o hacer algo con estos dos argumentos parámetros.

116
00:07:23,420 --> 00:07:29,780
También se le conoce como bi consumer, también del tipo genérico.

117
00:07:30,020 --> 00:07:36,980
Por poner un ejemplo del tipo string puede ser de cualquier tipo dato integer o los dos del tipo String,

118
00:07:37,070 --> 00:07:41,060
o los dos del tipo integer o del tipo usuario o como queramos.

119
00:07:41,120 --> 00:07:51,270
Pero son dos argumento consumidor bi porque son dos parámetros igual a como B bien a tu esto fecha se

120
00:07:51,300 --> 00:07:56,480
debe escribir de esta forma o bien puedo colocar acá los paréntesis, pero es opcional.

121
00:07:56,600 --> 00:07:59,810
Cuando es un solo argumento se puede omitir los paréntesis.

122
00:08:00,110 --> 00:08:04,700
Incluso pude colocar el tipo de dato dato en un método afinal.

123
00:08:04,880 --> 00:08:11,450
Pero también el dato está indicado en el genérico acá, entonces no necesario, tampoco necesario acá

124
00:08:11,690 --> 00:08:17,480
los paréntesis, pero cuando son dos, ahí estoy obligado a utilizar paréntesis, en este caso del tipo

125
00:08:17,480 --> 00:08:19,400
string y del tipo entero.

126
00:08:19,490 --> 00:08:23,720
Por ejemplo, nombre, edad.

127
00:08:25,900 --> 00:08:27,890
Llega, implementamos algo, lo que queramos.

128
00:08:29,720 --> 00:08:30,800
Punto y coma al final.

129
00:08:31,940 --> 00:08:34,730
También podría colocar acá del tipo String.

130
00:08:36,340 --> 00:08:37,210
Por ejemplo.

131
00:08:38,990 --> 00:08:48,800
GT Del tipo INTEA, pero tampoco es necesario porque está indicado en el genérico, pero lo que sí es

132
00:08:49,010 --> 00:08:56,150
obligación colocar los paréntesis, porque ya son dos argumentos, al ser dos o más se colocan paréntesis.

133
00:08:58,050 --> 00:09:06,120
Shout Vamos a imprimir nombre, tiene edad?

134
00:09:08,530 --> 00:09:12,970
Años, como por ejemplo Pepe tiene 20 años.

135
00:09:14,020 --> 00:09:15,010
Qué pasa si lo ejecuto?

136
00:09:15,110 --> 00:09:16,150
Bueno, no pasa nada.

137
00:09:19,330 --> 00:09:24,640
Porque no solamente estamos implementando este método al vuelo, no estamos solamente implementando,

138
00:09:24,880 --> 00:09:28,930
ahora lo tengo que utilizar con este objeto, con esta expresión blanda.

139
00:09:29,590 --> 00:09:37,510
Entonces acá consumidor vi punto acepto y acá acepta Streak y el entero.

140
00:09:39,710 --> 00:09:40,170
PP.

141
00:09:41,540 --> 00:09:42,080
20.

142
00:09:47,160 --> 00:09:48,090
Pepe tiene 20 años.

143
00:09:48,120 --> 00:09:51,800
Se fijan estas son expresiones lande que vienen predefinidas en Yaba.

144
00:09:51,990 --> 00:09:54,840
Simplemente la podemos utilizar con el método acept.

145
00:09:54,990 --> 00:09:58,800
Bien, pero por ahora quedamos hasta acá y continuamos en la siguiente clase.
