{"id":22157851,"url":"https://github.com/lsmcodes/java-stream","last_synced_at":"2025-03-24T14:48:30.121Z","repository":{"id":241557972,"uuid":"805537791","full_name":"lsmcodes/java-stream","owner":"lsmcodes","description":"Resolução dos exercícios apresentados durante o curso \"Ganhando Produtividade com Stream API\" - DIO","archived":false,"fork":false,"pushed_at":"2024-07-04T20:08:32.000Z","size":26,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-29T19:48:33.390Z","etag":null,"topics":["exercises","santander-bootcamp-2024","stream-api"],"latest_commit_sha":null,"homepage":"http://www.dio.me","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lsmcodes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-24T19:53:53.000Z","updated_at":"2024-07-09T01:26:17.000Z","dependencies_parsed_at":"2024-05-29T02:47:51.249Z","dependency_job_id":"fe54688b-21af-48d1-bf48-98f419d204fc","html_url":"https://github.com/lsmcodes/java-stream","commit_stats":null,"previous_names":["lsmcodes/java-stream"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fjava-stream","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fjava-stream/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fjava-stream/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fjava-stream/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lsmcodes","download_url":"https://codeload.github.com/lsmcodes/java-stream/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245294766,"owners_count":20591899,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["exercises","santander-bootcamp-2024","stream-api"],"created_at":"2024-12-02T03:15:48.401Z","updated_at":"2025-03-24T14:48:30.092Z","avatar_url":"https://github.com/lsmcodes.png","language":"Java","readme":"# DIO - Trilha POO Java\n\u003cdiv style=\"display:inline-block\"\u003e\n        \u003cpicture\u003e\n                \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://img.shields.io/badge/Java-black?style=for-the-badge\u0026logo=OpenJDK\u0026logoColor=white\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Java-white?style=for-the-badge\u0026logo=OpenJDK\u0026logoColor=black\" /\u003e\n        \u003c/picture\u003e\n        \u003cpicture\u003e\n                \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://img.shields.io/badge/Maven-black?style=for-the-badge\u0026logo=ApacheMaven\u0026logoColor=white\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Maven-white?style=for-the-badge\u0026logo=ApacheMaven\u0026logoColor=black\" /\u003e\n        \u003c/picture\u003e\n        \u003cpicture\u003e\n                \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://img.shields.io/badge/Spring_Boot-black?style=for-the-badge\u0026logo=SpringBoot\u0026logoColor=white\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Spring_Boot-white?style=for-the-badge\u0026logo=SpringBoot\u0026logoColor=black\" /\u003e\n        \u003c/picture\u003e\n\u003c/div\u003e\n\n## Autora dos Exercícios e Repositório Original\n- [Camila Cavalcante](https://github.com/cami-la)\n- [Stream API Java](https://github.com/digitalinnovationone/ganhando_produtividade_com_Stream_API_Java)\n\n## Java Stream API\nA `Stream API` é uma abstração disponibilizada no Java 8 para trabalhar com coleções. Trata-se de uma poderosa solução para processar coleções de maneira `declarativa`, ao invés da tradicional e burocrática forma `imperativa`.\n\n## Exercícios\nEste repositório contém exemplos e desafios que colocam em prática os seguintes temas:\n\n- Functional Interfaces\n- Principais métodos das Stream API\n\n## Programação Imperativa\n`Programação imperativa` consiste em conjuntos de instruções detalhadas que são fornecidas ao computador para serem executadas em uma determinada ordem.\n\nNo exemplo a seguir, para fazer uma simples soma foi necessário explicitamente iterar sobre `itemList`, calcular o preço total de cada item e acumular o valor em `valorTotal`.\n\n```java\npublic class CarrinhoDeCompras {\n\t// Atributos\n  \tprivate List\u003cItem\u003e itemList;\n\t\n  \t// Construtor\n  \tpublic CarrinhoDeCompras() {\n    \t\tthis.itemList = new ArrayList\u003c\u003e();\n  \t}\n  \n  \t// Método para calcular valor total dos itens sem utilizar a Stream API\n\tpublic double calcularValorTotal() {\n    \t\tdouble valorTotal = 0d;\n    \t\tif (!itemList.isEmpty()) {\n      \t\t\tfor (Item item : itemList) {\n        \t\t\tdouble valorItem = item.getPreco() * item.getQuantidade();\n        \t\t\tvalorTotal += valorItem;\n      \t\t\t}\n      \t\t\treturn valorTotal;\n    \t\t} else {\n      \t\t\tthrow new RuntimeException(\"A lista está vazia.\");\n    \t\t}\n  \t}\n}\n```\n\n## Programação Declarativa\n`Programação declarativa` é o oposto direto da programação imperativa no sentido de que o desenvolvedor não dá instruções sobre como o computador deve executar a tarefa, mas sim sobre qual resultado é esperado.\n\nNo exemplo a seguir, para realizar a mesma soma que o exemplo anterior foi necessário apenas descrever o que deve ser feito: um stream de itens (`itemList.stream()`), transformar cada item em um valor double (`mapToDouble()`) e somar todos os valores (`sum()`).\n\n```java\npublic class CarrinhoDeCompras {\n  \t// Atributos\n  \tprivate List\u003cItem\u003e itemList;\n\t\n  \t// Construtor\n  \tpublic CarrinhoDeCompras() {\n    \t\tthis.itemList = new ArrayList\u003c\u003e();\n  \t}\n  \n  \t// Método para calcular valor total dos itens utilizando a Stream API\n  \tpublic double calcularValorTotal() {\n    \t\tif (itemList.isEmpty()) {\n      \t\t\tthrow new RuntimeException(\"A lista está vazia.\");\n    \t\t}\n    \t\treturn itemList.stream()\n        \t.mapToDouble(item -\u003e item.getPreco() * item.getQuant())\n        \t.sum();\n  \t}\n}\n```\n\n## Lambda\n`Expressões lambda` permitem que classes anônimas de implementação simples sejam escritas de forma mais simplificada e clara. Também permitem que tratemos funcionalidades como argumentos e código como dados.\n\nA sintaxe de expressões lambda consiste em uma lista de parâmetros separados por vírgula entre parênteses, o operador de seta e um corpo que pode ser uma única expressão ou um bloco de instruções: `(parameters-list) -\u003e expression-body`.\n\n```java\npublic class OrdenacaoPessoa {\n\t// Atributo\n\tprivate List\u003cPessoa\u003e pessoaList;\n\n  \t// Construtor\n  \tpublic OrdenacaoPessoa() {\n    \t\tthis.pessoaList = new ArrayList\u003c\u003e();\n  \t}\n\n  \tpublic List\u003cPessoa\u003e ordenarPorAltura() {\n    \t\tif (!pessoaList.isEmpty()) {\n      \t\t\tList\u003cPessoa\u003e pessoasPorAltura = new ArrayList\u003c\u003e(pessoaList);\n      \t\t\tpessoasPorAltura.sort((p1, p2) -\u003e Double.compare(p1.getAltura(), p2.getAltura()));\n      \t\t\treturn pessoasPorAltura;\n    \t\t} else {\n      \t\t\tthrow new RuntimeException(\"A lista está vazia.\");\n    \t\t}\n  \t}\n}\n```\n\n## Method Reference\nAs expressões lambda são usadas para criar métodos anônimos. Porém, às vezes expressões lambda não fazem nada além de invocar um método já existente e nesses casos, é frequentemente mais claro se referir ao método pelo nome. `Method references` permitem isso.\n\nComo há diferentes tipos de method references, as sintaxes variam. O tipo de method reference que se refere a um método de instância de um determinado objeto tem sua sintaxe composta pelo objeto que contém o método, o operador de referência de método e o nome do método de instância do objeto: `containingObject::instanceMethodName`.\n\n```java\npublic class OrdenacaoPessoa {\n  \t// Atributo\n  \tprivate List\u003cPessoa\u003e pessoaList;\n\n  \t// Construtor\n  \tpublic OrdenacaoPessoa() {\n    \t\tthis.pessoaList = new ArrayList\u003c\u003e();\n  \t}\n\n  \tpublic List\u003cPessoa\u003e ordenarPorAltura() {\n    \t\tif (!pessoaList.isEmpty()) {\n      \t\t\tList\u003cPessoa\u003e pessoasPorAltura = new ArrayList\u003c\u003e(pessoaList);\n      \t\t\tpessoasPorAltura.sort(Comparator.comparingDouble(Pessoa::getAltura));\n      \t\t\treturn pessoasPorAltura;\n    \t\t} else {\n      \t\t\tthrow new RuntimeException(\"A lista está vazia.\");\n    \t\t}\n  \t}\n}\n```\n\n## Referências\n- Java Stream API - Oracle: https://www.oracle.com/br/technical-resources/articles/java-stream-api.html\n- Programming Paradigms - FreeCodeCamp: https://www.geeksforgeeks.org/difference-between-imperative-and-declarative-programming/\n- Lambda Expressions - Oracle: https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html#syntax\n- Method References - Oracle: https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flsmcodes%2Fjava-stream","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flsmcodes%2Fjava-stream","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flsmcodes%2Fjava-stream/lists"}