1
00:00:00,150 --> 00:00:00,620
Bienvenidos.

2
00:00:00,630 --> 00:00:02,880
Continuamos con el operador Flat Map.

3
00:00:03,150 --> 00:00:06,660
Vamos a ver la diferencia también contra versus el mapa.

4
00:00:06,900 --> 00:00:10,470
Bien, vamos a cerrar todo derecho, cerrar todo.

5
00:00:11,220 --> 00:00:14,670
Nos vamos a ir al ejemplo filter este de acá.

6
00:00:16,190 --> 00:00:21,560
Bien, entonces, en vez de utilizar el filter para filtrar, podríamos utilizar un flat map y modificar

7
00:00:21,650 --> 00:00:25,730
lo primero vamos a dejar nombre fue dicho esto lo quitamos.

8
00:00:26,720 --> 00:00:29,300
Entonces Fugit va a ser nuestro operador terminal.

9
00:00:29,630 --> 00:00:31,400
Vamos a modificar el filter.

10
00:00:31,850 --> 00:00:34,250
Vamos a usar un flat map.

11
00:00:34,440 --> 00:00:35,770
Bien, es muy parecido al map.

12
00:00:36,140 --> 00:00:37,820
De hecho, acá se emite el usuario.

13
00:00:38,920 --> 00:00:45,460
Acá voy a quitar esto las llaves y tenemos que retornar un objeto, pero no es un objeto común y corriente,

14
00:00:45,490 --> 00:00:54,100
no es un objeto como el usuario, como un string, no es otro flujo, debemos retornar un stream, entonces

15
00:00:54,100 --> 00:00:58,000
al final lo que se devuelve es una salida distinta.

16
00:00:58,220 --> 00:01:06,070
Y si de hecho el flat map devuelve o retorna varias salida por cada elemento, devuelve un stream separado.

17
00:01:06,220 --> 00:01:07,120
Otra corriente.

18
00:01:07,240 --> 00:01:11,390
Pero toda esa corriente, porque vamos a tener un string por cada elemento.

19
00:01:11,530 --> 00:01:16,060
Finalmente se aplana en una sola corriente, es decir, después por debajo es flat map.

20
00:01:16,120 --> 00:01:19,990
Lo que hace es tomar todo esto es trim y lo aplana en uno solo.

21
00:01:20,200 --> 00:01:21,160
Esa es la diferencia.

22
00:01:21,410 --> 00:01:23,140
Bien, vamos a filtrar por Pepe.

23
00:01:23,440 --> 00:01:24,850
Entonces vamos a usar un if.

24
00:01:25,060 --> 00:01:31,710
Entonces si u el usuario pun to keep nombre y cuál es?

25
00:01:32,170 --> 00:01:35,830
Pues sería equals o equals ignore keys acá.

26
00:01:35,860 --> 00:01:37,960
Pepe Entonces perfecto.

27
00:01:37,960 --> 00:01:40,960
Si se cumple, vamos a devolver.

28
00:01:42,190 --> 00:01:48,220
No el usuario ojo, porque si devolvemos el usuario que es un objeto común y corriente, lanza un error

29
00:01:48,700 --> 00:01:50,730
de hecho para que lo vean visualmente.

30
00:01:50,920 --> 00:01:58,030
Si colocamos ratón en el live de U y acá ratón o también el usuario marca error porque lo que tengo

31
00:01:58,030 --> 00:02:02,410
que devolver es un stream y no un usuario, se fijan un stream de usuario.

32
00:02:03,430 --> 00:02:07,240
Entonces vamos a modificar acá el stream.

33
00:02:07,820 --> 00:02:12,690
Punto off de pero de un solo elemento u.

34
00:02:13,810 --> 00:02:19,990
Es decir, convertimos el objeto usuario en un stream y por cada uno recuerden que se emite cada elemento.

35
00:02:19,990 --> 00:02:26,080
Cada uno va a tener una salida distinta, una sola entrada y por cada entrada una salida diferente,

36
00:02:26,230 --> 00:02:27,340
un stream diferente.

37
00:02:27,940 --> 00:02:30,220
Ahora, qué pasa si no existe o si no coincide?

38
00:02:30,310 --> 00:02:32,550
No es Pepe, que sería como el else.

39
00:02:32,710 --> 00:02:35,110
Acá retornamos un stream vacío.

40
00:02:35,890 --> 00:02:36,790
Entonces trim.

41
00:02:36,910 --> 00:02:37,950
Punto empty.

42
00:02:38,530 --> 00:02:41,470
Es decir, creamos un stream sin elemento vacío.

43
00:02:41,710 --> 00:02:42,280
Y eso es todo.

44
00:02:42,460 --> 00:02:49,270
Y al final sería lo mismo que el filter filtra, retorna el elemento encontrado como un stream.

45
00:02:49,480 --> 00:02:51,790
Si no vacío, no devuelve nada.

46
00:02:51,880 --> 00:02:56,260
Por lo tanto, no se va a emitir ningún elemento en el stream cuando es vacío.

47
00:02:56,470 --> 00:03:00,650
Es como si no existiera y estos elementos se van a aplanar en una sola corriente.

48
00:03:00,850 --> 00:03:04,660
Es decir, en realidad estos stream se van a planear en un solo stream.

49
00:03:05,140 --> 00:03:07,570
Eso es lo que hace la palabra simple.

50
00:03:07,660 --> 00:03:09,640
El map versus el flat map.

51
00:03:09,730 --> 00:03:13,390
El map devuelve un objeto, un objeto común y corriente.

52
00:03:13,420 --> 00:03:17,540
Por ejemplo, si el stream es de usuario, devuelve un objeto usuario modificado.

53
00:03:17,560 --> 00:03:19,000
Por ejemplo, es flama.

54
00:03:19,090 --> 00:03:22,180
A diferencia, devuelve un stream de su objeto.

55
00:03:22,420 --> 00:03:23,110
Otro flujo.

56
00:03:23,200 --> 00:03:23,890
Otra salida.

57
00:03:24,220 --> 00:03:24,640
Listo.

58
00:03:25,120 --> 00:03:26,050
Vamos a ejecutar.

59
00:03:29,990 --> 00:03:33,560
Pepe Mena y Pepe García, mismo resultado que Filter.

60
00:03:34,010 --> 00:03:39,890
De hecho, que muestra dos veces por el hecho y por el PIC, pero se fijan, no aparece los demás elementos

61
00:03:40,040 --> 00:03:41,030
porque son empty.

62
00:03:41,180 --> 00:03:42,470
Por lo tanto no se emiten.

63
00:03:42,620 --> 00:03:48,470
De hecho, si modificamos acá, voy a comentar en vez de usar el for each como terminal.

64
00:03:49,640 --> 00:03:53,720
Usamos nombres punto count y lo vamos a imprimir.

65
00:03:54,440 --> 00:03:55,850
Entonces Shout

66
00:03:59,360 --> 00:04:01,280
debería mostrar dos, dos elementos.

67
00:04:05,770 --> 00:04:06,910
TPM, NPP García.

68
00:04:08,020 --> 00:04:10,400
Otra forma de filtrar utilizando Flat nada.

69
00:04:10,810 --> 00:04:11,390
Nada más.

70
00:04:11,410 --> 00:04:13,500
Continuamos en la siguiente clase.
