{"id":13905,"date":"2022-10-26T12:50:22","date_gmt":"2022-10-26T10:50:22","guid":{"rendered":"https:\/\/www.espai.es\/blog\/?p=13905"},"modified":"2022-11-09T11:13:21","modified_gmt":"2022-11-09T09:13:21","slug":"java-streams","status":"publish","type":"post","link":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/","title":{"rendered":"Java Streams"},"content":{"rendered":"<p><a href=\"https:\/\/www.espai.es\/blog\/2022\/10\/java-lambdas\/\" target=\"_blank\" rel=\"noopener\">En un art\u00edculo <\/a><a href=\"https:\/\/www.espai.es\/blog\/2022\/10\/java-lambdas\/\">anterior<\/a> hablamos de Lambdas y de c\u00f3mo nos permiten pasar c\u00f3digo como par\u00e1metro. En el presente hablaremos de <strong>Java Streams<\/strong>, que sirven para simplificar el uso de las colecciones. Nos permitir\u00e1n filtrar y recorrer los datos de manera m\u00e1s r\u00e1pida y eficiente.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_13927\" style=\"width: 619px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-13927\" class=\"wp-image-13927 size-full\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_lambdas_0.jpg\" alt=\"\" width=\"609\" height=\"400\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_lambdas_0.jpg 609w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_lambdas_0-300x197.jpg 300w\" sizes=\"auto, (max-width: 609px) 100vw, 609px\" \/><p id=\"caption-attachment-13927\" class=\"wp-caption-text\">Yo mismo despu\u00e9s de leer el p\u00e1rrafo anterior<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>Mejor veamos un ejemplo:<\/p>\n<p>&nbsp;<\/p>\n<h3>\u00bfC\u00f3mo recorremos una colecci\u00f3n de forma \u00abcl\u00e1sica\u00bb?<\/h3>\n<p>&nbsp;<\/p>\n<p>Seguro que te suena este c\u00f3digo<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-13909\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_1-1024x518.png\" alt=\"\" width=\"1024\" height=\"518\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_1-1024x518.png 1024w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_1-300x152.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_1-768x389.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_1-700x354.png 700w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_1.png 1511w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>El fragmento resaltado en rojo se utiliza para \u00abrecorrer\u00bb la lista de nombres y mostrarla en pantalla. Nada enrevesado. Ahora veamos como ser\u00eda usando Streams<\/p>\n<p>&nbsp;<\/p>\n<h3 id=\"recorrerColeccionStream\">\u00bfC\u00f3mo recorremos una colecci\u00f3n con Java Streams?<\/h3>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-13910\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_2-1024x522.png\" alt=\"\" width=\"1024\" height=\"522\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_2-1024x522.png 1024w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_2-300x153.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_2-768x392.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_2-700x357.png 700w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_2.png 1508w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Como puede apreciarse, no es tanto que sea m\u00e1s corto (que lo es) sino que es mas \u00abdescriptivo\u00bb. Casi se puede leer como lenguaje natural:<\/p>\n<p>\u00abCon la lista de nombres, creas un stream y para cada elemento de ese stream lo muestras con println\u00bb.<\/p>\n<p>F\u00edjate que estamos usando un \u00ablambda\u00bb, aqu\u00ed:<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-13911\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_3.png\" alt=\"\" width=\"752\" height=\"83\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_3.png 752w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_3-300x33.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_3-700x77.png 700w\" sizes=\"auto, (max-width: 752px) 100vw, 752px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Es decir, que la funci\u00f3n forEach \u00abrecibe c\u00f3digo\u00bb directamente, no una variable! El truco es que un <strong>Lambda<\/strong> realmente se recoge en un objeto, pero eso es transparente para nosotros. Como programadores, estamos pasando un <strong>comportamiento<\/strong> <strong>como par\u00e1metro<\/strong> en lugar de un dato.<\/p>\n<p>&nbsp;<\/p>\n<h3>\u00bfTodas las funciones pueden recibir un lambda como par\u00e1metro?<\/h3>\n<p>&nbsp;<\/p>\n<h3><\/h3>\n<p><strong><span style=\"text-decoration: underline\">Respuesta corta<\/span><\/strong><\/p>\n<p><strong>No<\/strong>. S\u00f3lo aquellas funciones \u00abdise\u00f1adas\u00bb para recibirlos.<\/p>\n<h3><\/h3>\n<p><span style=\"text-decoration: underline\"><strong>Respuesta larga<\/strong><\/span><\/p>\n<p>Los Streams son una librer\u00eda nueva en Java, <strong>dise\u00f1ada espec\u00edficamente<\/strong> para potenciar su uso con lambdas. Por eso ver\u00e1s que muchas de las funciones de streams (como <strong>forEach<\/strong> que ya hemos visto, o <strong>map<\/strong> y <strong>filter<\/strong> que veremos m\u00e1s adelante) reciben un tipo de objeto espec\u00edfico. Vamos, que no puedes pasar un \u00abInteger\u00bb y quedarte tan ancho.<\/p>\n<p>Si tienes curiosidad por las interfaces funcionales (que son el tipo de dato que representa a un Lambda) puedes verlas todas aqu\u00ed:<\/p>\n<p><a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/function\/package-summary.html\">Documentaci\u00f3n oficial de Oracle: Interfaces funcionales<\/a><\/p>\n<h3><\/h3>\n<h3>Debo conocerlas todas para usarlas?<\/h3>\n<p>&nbsp;<\/p>\n<p>No, con 3 o 4 de ellas ya puedes sacar partido de los Streams. A saber:<\/p>\n<p><a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/function\/Consumer.html\" target=\"_blank\" rel=\"noopener\">Consumer<\/a><\/p>\n<p><a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/function\/Supplier.html\" target=\"_blank\" rel=\"noopener\">Supplier<\/a><\/p>\n<p><a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/function\/Function.html\" target=\"_blank\" rel=\"noopener\">Function<\/a><\/p>\n<p><a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/function\/Predicate.html\" target=\"_blank\" rel=\"noopener\">Predicate<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>En el caso de Stream.<strong>forEach<\/strong>, recibe un objeto de tipo <strong>Consumer<\/strong>. Aqu\u00ed est\u00e1 la firma de la funci\u00f3n:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-13913\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_4.png\" alt=\"\" width=\"968\" height=\"139\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_4.png 968w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_4-300x43.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_4-768x110.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_4-700x101.png 700w\" sizes=\"auto, (max-width: 968px) 100vw, 968px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>void significa que \u00abforEach\u00bb no va a retornar nada: Solo hace \u00abalgo\u00bb que le pedimos, en este caso <strong>System.out.println<\/strong>.<\/p>\n<p>En cambio s\u00ed recibe un par\u00e1metro, y casualmente de tipo <strong>Consumer<\/strong>. Esta interface contiene el m\u00e9todo <strong>accept<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-13914\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_5-1024x157.png\" alt=\"\" width=\"1024\" height=\"157\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_5-1024x157.png 1024w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_5-300x46.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_5-768x118.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_5-700x108.png 700w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_5.png 1242w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Consumer tampoco retorna nada (void) pero s\u00ed recibe un par\u00e1metro, de cualquier tipo (por eso la <strong>T<\/strong>).<\/p>\n<p>&nbsp;<\/p>\n<h3>Pasando un objeto Consumer a Stream.forEach<\/h3>\n<p>&nbsp;<\/p>\n<p>Este m\u00e9todo <strong>accept<\/strong> es el que <strong>forEach<\/strong> utilizar\u00e1 para ejecutar el lambda que le pasemos.<\/p>\n<p>Para aclarar esto, una imagen vale m\u00e1s que mil palabras:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-13915\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_6-1024x256.png\" alt=\"\" width=\"1024\" height=\"256\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_6-1024x256.png 1024w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_6-300x75.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_6-768x192.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_6-700x175.png 700w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_6.png 1534w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Este fragmento de c\u00f3digo es equivalente al de la secci\u00f3n <a href=\"#recorrerColeccionStream\"><strong>\u00bfC\u00f3mo recorremos una colecci\u00f3n con un Stream?<\/strong><\/a><\/p>\n<p>Como puede verse, podemos crear un objeto de tipo <strong>Consumer<\/strong> que se encargar\u00e1 del <strong>system.out<\/strong> y pasar esa variable (<strong>mi_consumer<\/strong>) como argumento al <strong>forEach<\/strong>. Esta forma es un poco m\u00e1s tradicional, pero a fin de cuentas funciona igual:<\/p>\n<ol>\n<li>Creamos un lambda con la acci\u00f3n que se va a realizar<\/li>\n<li>Creamos un stream<\/li>\n<li>Invocamos a <strong>forEach<\/strong> para que se aplique el lambda (miConsumer) a CADA ELEMENTO del stream.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>Si pudi\u00e9ramos ver c\u00f3mo funciona forEach \u00abpor dentro\u00bb ser\u00eda algo as\u00ed:<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-13921\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_7.png\" alt=\"\" width=\"574\" height=\"151\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_7.png 574w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_7-300x79.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_7-570x151.png 570w\" sizes=\"auto, (max-width: 574px) 100vw, 574px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>F\u00edjate que el \u00abconsumer\u00bb que le pasamos como par\u00e1metro es el que realmente hace el trabajo. forEach solo se dedica a \u00abrecorrer\u00bb el stream (es decir, la lista) y aplicar a cada elemento de esa lista el m\u00e9todo \u00abaccept\u00bb del consumer.<\/p>\n<p>De esta manera nos ahorramos recorrer \u00aba mano\u00bb la lista de valores, ya que dejamos en manos de forEach esta tarea. Nosotros nos encargamos s\u00f3lo de decirle qu\u00e9 hacer con cada elemento, usando un Consumer.<\/p>\n<p>&nbsp;<\/p>\n<p>Y hasta aqu\u00ed el art\u00edculo de hoy, en el siguiente veremos m\u00e1s aplicaciones de los Streams y profundizaremos en las otras interfaces funcionales: <strong>Supplier, Function y Predicate<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<p>Un saludo y feliz semana!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En un art\u00edculo anterior hablamos de Lambdas y de c\u00f3mo nos permiten pasar c\u00f3digo como par\u00e1metro. En el presente hablaremos de Java Streams, que sirven para simplificar el uso de las colecciones. Nos permitir\u00e1n filtrar y recorrer los datos de manera m\u00e1s r\u00e1pida y eficiente&#8230;.<\/p>\n","protected":false},"author":3,"featured_media":13939,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_ef_editorial_meta_date_first-draft-date":"","_ef_editorial_meta_paragraph_assignment":"","_ef_editorial_meta_checkbox_needs-photo":"","_ef_editorial_meta_number_word-count":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[220,89],"class_list":["post-13905","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacion","tag-java","tag-programacion-2"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Java Streams - Blog Escola Espai<\/title>\n<meta name=\"description\" content=\"Los Java Streams nos permiten acceder a los datos de forma sencilla, adem\u00e1s de permitirnos operaciones comunes como filtrar o actualizar.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java Streams - Blog Escola Espai\" \/>\n<meta property=\"og:description\" content=\"Los Java Streams nos permiten acceder a los datos de forma sencilla, adem\u00e1s de permitirnos operaciones comunes como filtrar o actualizar.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Escola Espai\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-26T10:50:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-09T09:13:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_portada-4.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Escobar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Escobar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/\"},\"author\":{\"name\":\"Escobar\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/d2e265073982f28e16cb7edccbd16602\"},\"headline\":\"Java Streams\",\"datePublished\":\"2022-10-26T10:50:22+00:00\",\"dateModified\":\"2022-11-09T09:13:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/\"},\"wordCount\":720,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_portada-4.png\",\"keywords\":[\"Java\",\"programaci\u00f3n\"],\"articleSection\":[\"Programaci\u00f3n\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/\",\"url\":\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/\",\"name\":\"Java Streams - Blog Escola Espai\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_portada-4.png\",\"datePublished\":\"2022-10-26T10:50:22+00:00\",\"dateModified\":\"2022-11-09T09:13:21+00:00\",\"author\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/d2e265073982f28e16cb7edccbd16602\"},\"description\":\"Los Java Streams nos permiten acceder a los datos de forma sencilla, adem\u00e1s de permitirnos operaciones comunes como filtrar o actualizar.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#primaryimage\",\"url\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_portada-4.png\",\"contentUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_portada-4.png\",\"width\":1000,\"height\":500},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.espai.es\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java Streams\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.espai.es\/blog\/#website\",\"url\":\"https:\/\/www.espai.es\/blog\/\",\"name\":\"Blog Escola Espai\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.espai.es\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/d2e265073982f28e16cb7edccbd16602\",\"name\":\"Escobar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6fb517675f8bc757ee26d9143abae3c5eac58b13068bfcbc1485bbb092cef370?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6fb517675f8bc757ee26d9143abae3c5eac58b13068bfcbc1485bbb092cef370?s=96&d=mm&r=g\",\"caption\":\"Escobar\"},\"sameAs\":[\"http:\/\/www.espai.es\"],\"url\":\"https:\/\/www.espai.es\/blog\/author\/escobar\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Java Streams - Blog Escola Espai","description":"Los Java Streams nos permiten acceder a los datos de forma sencilla, adem\u00e1s de permitirnos operaciones comunes como filtrar o actualizar.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/","og_locale":"es_ES","og_type":"article","og_title":"Java Streams - Blog Escola Espai","og_description":"Los Java Streams nos permiten acceder a los datos de forma sencilla, adem\u00e1s de permitirnos operaciones comunes como filtrar o actualizar.","og_url":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/","og_site_name":"Blog Escola Espai","article_published_time":"2022-10-26T10:50:22+00:00","article_modified_time":"2022-11-09T09:13:21+00:00","og_image":[{"width":1000,"height":500,"url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_portada-4.png","type":"image\/png"}],"author":"Escobar","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Escobar","Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#article","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/"},"author":{"name":"Escobar","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/d2e265073982f28e16cb7edccbd16602"},"headline":"Java Streams","datePublished":"2022-10-26T10:50:22+00:00","dateModified":"2022-11-09T09:13:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/"},"wordCount":720,"commentCount":0,"image":{"@id":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_portada-4.png","keywords":["Java","programaci\u00f3n"],"articleSection":["Programaci\u00f3n"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/","url":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/","name":"Java Streams - Blog Escola Espai","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#primaryimage"},"image":{"@id":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_portada-4.png","datePublished":"2022-10-26T10:50:22+00:00","dateModified":"2022-11-09T09:13:21+00:00","author":{"@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/d2e265073982f28e16cb7edccbd16602"},"description":"Los Java Streams nos permiten acceder a los datos de forma sencilla, adem\u00e1s de permitirnos operaciones comunes como filtrar o actualizar.","breadcrumb":{"@id":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#primaryimage","url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_portada-4.png","contentUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_portada-4.png","width":1000,"height":500},{"@type":"BreadcrumbList","@id":"https:\/\/www.espai.es\/blog\/2022\/10\/java-streams\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.espai.es\/blog\/"},{"@type":"ListItem","position":2,"name":"Java Streams"}]},{"@type":"WebSite","@id":"https:\/\/www.espai.es\/blog\/#website","url":"https:\/\/www.espai.es\/blog\/","name":"Blog Escola Espai","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.espai.es\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/d2e265073982f28e16cb7edccbd16602","name":"Escobar","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6fb517675f8bc757ee26d9143abae3c5eac58b13068bfcbc1485bbb092cef370?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6fb517675f8bc757ee26d9143abae3c5eac58b13068bfcbc1485bbb092cef370?s=96&d=mm&r=g","caption":"Escobar"},"sameAs":["http:\/\/www.espai.es"],"url":"https:\/\/www.espai.es\/blog\/author\/escobar\/"}]}},"jetpack_featured_media_url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2022\/10\/java_streams_portada-4.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/13905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/comments?post=13905"}],"version-history":[{"count":19,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/13905\/revisions"}],"predecessor-version":[{"id":13941,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/13905\/revisions\/13941"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media\/13939"}],"wp:attachment":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media?parent=13905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/categories?post=13905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/tags?post=13905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}