• Stars
    star
    673
  • Rank 66,612 (Top 2 %)
  • Language
    Java
  • Created about 1 year ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Este repositório contém o código-fonte do curso "Ganhando Produtividade com Stream API Java". O curso foi projetado para ajudar desenvolvedores Java a aproveitar ao máximo a poderosa Stream API introduzida no Java 8.

Ganhando Produtividade com Stream API e Java

  • A Streams API traz uma nova opção para a manipulação de coleções em Java seguindo os princípios da programação funcional.
  • Stream, trata-se de uma poderosa solução para processar coleções de maneira declarativa, ao invés da tradicional e burocrática forma imperativa.
public class CarrinhoDeCompras {
  //atributos
  private List<Item> itemList;
  //construtor
  public CarrinhoDeCompras() {
    this.itemList = new ArrayList<>();
  }
  
  //método para calcular valor total dos itens sem utilizar o Stream API
  public double calcularValorTotal() {
    double valorTotal = 0d;
    if (!itemList.isEmpty()) {
      for (Item item : itemList) {
        double valorItem = item.getPreco() * item.getQuant();
        valorTotal += valorItem;
      }
      return valorTotal;
    } else {
      throw new RuntimeException("A lista está vazia!");
    }
  }
}
  • Na forma imperativa, para realizar uma soma simples, por exemplo, o desenvolvedor tem que se preocupar não apenas com o que deve ser feito em cada elemento, isto é, com as regras associadas ao processamento dos elementos da lista, mas também com a maneira de realizar essa iteração.
public class CarrinhoDeCompras {
  //atributos
  private List<Item> itemList;
  //construtor
  public CarrinhoDeCompras() {
    this.itemList = new ArrayList<>();
  }
  
  //método para calcular valor total dos itens utilizando o Stream API
  public double calcularValorTotal() {
    if (itemList.isEmpty()) {
      throw new RuntimeException("A lista está vazia!");
    }
    return itemList.stream()
        .mapToDouble(item -> item.getPreco() * item.getQuant())
        .sum();
  }
}
  • Combinada com as Expressões Lambda e Method reference, eles proporcionam uma forma diferente de lidar com conjuntos de elementos, oferecendo ao desenvolvedor uma maneira simples e concisa de escrever código que resulta em facilidade de manutenção e paralelização sem efeitos indesejados em tempo de execução.
  • As operações na Stream API podem ser classificadas em duas categorias principais:
  1. Operações Intermediárias: são aquelas que retornam uma nova Stream e permitem encadear várias operações, formando um pipeline de processamento de dados. São elas:
  • filter(Predicate<T> predicate): Filtra os elementos da Stream com base em um predicado. Retorna uma nova Stream contendo apenas os elementos que atendem ao critério do predicado. Exemplo: stream.filter(n -> n > 5)
  • map(Function<T, R> mapper): Transforma cada elemento da Stream usando a função especificada e retorna uma nova Stream contendo os elementos resultantes. Exemplo: stream.map(s -> s.toUpperCase())
  • sorted(): Classifica os elementos da Stream em ordem natural (se os elementos forem comparáveis) ou de acordo com um comparador fornecido. Exemplo: stream.sorted()
  • distinct(): Remove elementos duplicados da Stream, considerando a implementação do método equals() para comparação. Exemplo: stream.distinct()
  • limit(long maxSize): Limita o número de elementos da Stream aos maxSize primeiros elementos Exemplo: stream.limit(10)
  • skip(long n): Pula os primeiros n elementos da Stream e retorna uma nova Stream sem eles. Exemplo: stream.skip(5)
  1. Operações Terminais: são aquelas que encerram o pipeline e produzem um resultado final. São elas:
  • forEach(Consumer<T> action): Executa uma ação para cada elemento da Stream. Exemplo: stream.forEach(System.out::println)
  • toArray(): Converte a Stream em um array contendo os elementos da Stream. Exemplo: stream.toArray()
  • collect(Collector<T, A, R> collector): Coleta os elementos da Stream em uma estrutura de dados específica, como uma lista ou um mapa. Exemplo: stream.collect(Collectors.toList())
  • count(): Retorna o número de elementos na Stream. Exemplo: stream.count()
  • anyMatch(Predicate<T> predicate): Verifica se algum elemento da Stream atende ao predicado especificado. Exemplo: stream.anyMatch(s -> s.startsWith("A"))
  • allMatch(Predicate<T> predicate): Verifica se todos os elementos da Stream atendem ao predicado especificado. Exemplo: stream.allMatch(n -> n > 0)
  • noneMatch(Predicate<T> predicate): Verifica se nenhum elemento da Stream atende ao predicado especificado. Exemplo: stream.noneMatch(s -> s.isEmpty())
  • min(Comparator<T> comparator) e max(Comparator<T> comparator): Encontra o elemento mínimo e máximo da Stream, respectivamente, de acordo com o comparador fornecido. Exemplo: stream.min(Comparator.naturalOrder()) ou stream.max(Comparator.naturalOrder())
  • reduce(T identity, BinaryOperator<T> accumulator): Combina os elementos da Stream usando o acumulador especificado e retorna o resultado final. Exemplo: stream.reduce(0, (a, b) -> a + b)

Lambda

  • As expressões lambda permitem representar interfaces funcionais (interfaces com um único método abstrato) de forma mais concisa e possibilitam escrever código no estilo funcional.
  • As interfaces funcionais desempenham um papel crucial na programação funcional em Java, pois servem de base para o uso de expressões lambda.
  • Uma função lambda é uma função sem declaração, isto é, não é necessário colocar um nome, um tipo de retorno e o modificador de acesso. A ideia é que o método seja declarado no mesmo lugar em que será usado.
  • As funções lambda em Java tem a sintaxe definida como (argumento) -> (corpo).
public class OrdenacaoPessoa {
  //atributo
  private List<Pessoa> pessoaList;

  //construtor
  public OrdenacaoPessoa() {
    this.pessoaList = new ArrayList<>();
  }

  public List<Pessoa> ordenarPorAltura() {
    if (!pessoaList.isEmpty()) {
      List<Pessoa> pessoasPorAltura = new ArrayList<>(pessoaList);
      pessoasPorAltura.sort((p1, p2) -> Double.compare(p1.getAltura(), p2.getAltura()));
      return pessoasPorAltura;
    } else {
      throw new RuntimeException("A lista está vazia!");
    }
  }
}

Method Reference

  • Method Reference é um novo recurso do Java 8 que permite fazer referência a um método ou construtor de uma classe (de forma funcional) e assim indicar que ele deve ser utilizado num ponto específico do código, deixando-o mais simples e legível.
  • Para utilizá-lo, basta informar uma classe ou referência seguida do símbolo “::” e o nome do método sem os parênteses no final.
public class OrdenacaoPessoa {
  //atributo
  private List<Pessoa> pessoaList;

  //construtor
  public OrdenacaoPessoa() {
    this.pessoaList = new ArrayList<>();
  }

  public List<Pessoa> ordenarPorAltura() {
    if (!pessoaList.isEmpty()) {
      List<Pessoa> pessoasPorAltura = new ArrayList<>(pessoaList);
      pessoasPorAltura.sort(Comparator.comparingDouble(Pessoa::getAltura));
      return pessoasPorAltura;
    } else {
      throw new RuntimeException("A lista está vazia!");
    }
  }
}

Referências

[1] "Java Stream API - Oracle." Oracle Brasil. Disponível em: https://www.oracle.com/br/technical-resources/articles/java-stream-api.html.

[2] "Java Collections API Examples - cami-la." GitHub. Disponível em: https://github.com/cami-la/collections-java-api-2023.

[3] "Como usar funções functional_interface em Java - DevMedia." DevMedia. Disponível em: https://www.devmedia.com.br/como-usar-funcoes-lambda-em-java/32826.

More Repositories

1

dio-lab-open-source

⚠LEIA A ISSUE FIXADA! Repositório do lab Contribuindo em um Projeto Open Source no GitHub da Digital Innovation One.
Jupyter Notebook
3,006
star
2

trilha-python-dio

Python
2,533
star
3

js-developer-pokedex

CSS
437
star
4

semana-frontend-mundo-invertido

Página com theme switcher utilizando HTML, CSS e JavaScript, além de integrar um formulário de inscrição com um banco de dados Firebase.
HTML
293
star
5

javascript-developer-m1

Repositório de Referência do Módulo I da Trilha "JavaScript Developer".
JavaScript
291
star
6

dio-springboot

Java
279
star
7

trilha-net-fundamentos-desafio

Desafio de projeto .NET Fundamentos - DIO
C#
242
star
8

trilha-java-basico

Java
236
star
9

lab-padroes-projeto-spring

Exemplos de Padrões de Projeto com Spring
Java
225
star
10

dio-flutter

Dart
187
star
11

lab-padroes-projeto-java

Exemplos de Padrões de Projeto em Java
Java
168
star
12

matches-simulator-app

App Android Nativo de Simulação de Partidas
Java
132
star
13

santander-dev-week-angular-home

Repo base para live de Angular da Dev week
HTML
100
star
14

roadmaps

Repositório público com Roadmaps colaborativos baseados nos conteúdos educacionais da DIO.
HTML
90
star
15

trilha-net-poo-desafio

C#
85
star
16

trilha-css-desafio-01

Primeiro desafio da Trilha de CSS: construindo uma landing page do curso com HTML e CSS.
HTML
83
star
17

copa-2022-android

Kotlin
76
star
18

cv

Template de Currículo (Referência W3C)
HTML
72
star
19

trilha-html-modulo-2

HTML
60
star
20

workout_api

Python
58
star
21

trilha-net-testes-unitarios-desafio

C#
55
star
22

dio-blockchain-for-devs

JavaScript
54
star
23

trilha-net-explorando-desafio

C#
53
star
24

trilha-net-api-desafio

C#
50
star
25

aprenda-kotlin-com-exemplos

Repositório de exemplos/exercícios explorados por meio da documentação oficial do Kotlin (Learn Kotlin by Example).
Kotlin
48
star
26

trilha-html-modulo-1

HTML
47
star
27

womens-world-cup-2023

RESTful API da Copa do Mundo FIFA de Futebol Feminino 2023 construída em Kotlin com Spring Boot 3.
Kotlin
45
star
28

santander-dev-week-2024

RESTful API da Santander Dev Week 2024 construída em Java 21 com Spring Boot 3.
41
star
29

trilha-net-banco-de-dados

TSQL
36
star
30

trilha-unity

C#
36
star
31

api-automation-tests-challenge-rest-assured

Repositório de acompanhamento para projeto de automação de testes com RestAssured.
Java
34
star
32

trilha-net-banco-de-dados-desafio

TSQL
33
star
33

santander-dev-week-bankline-api

Java
31
star
34

store_api

Python
31
star
35

soccer-news-app

App Nativo Android de Notícias Sobre Futebol Feminino (Mês da Mulher)
Java
27
star
36

resume

Personal resume website (based on W3C template).
HTML
23
star
37

santander-dev-week-2023-android

Kotlin
21
star
38

trilha-react-desafio01-calculadora

JavaScript
21
star
39

js-developer-portfolio

CSS
21
star
40

aprenda-kotlin-com-exemplos-lab

Desafio de Projeto criado para avaliação do conteúdo técnico explorado no repositório "aprenda-kotlin-com-exemplos".
Kotlin
20
star
41

trilha-html-modulo-3

HTML
19
star
42

santander-dev-week-2023-flutter

C++
17
star
43

live-coding-evitando-o-7x1-com-python-e-sql

https://lp.dio.me/evitando-7x1-com-python-e-sql
17
star
44

spring-boot-3-rest-api-template

Java
16
star
45

unity-my-little-farmer

Vamos criar um jogo onde o jogador administra uma pequena fazenda, cultivando diversas plantações em seu solo para assim colher seus frutos e envia-los para a cidade. Partindo de uma base pré-criada, vamos usar objetos primitivos do Unity para construir essa aventura, além de desenvolver as mecânicas principais ao vivo.
C#
16
star
46

trilha-gcp-fundations-terraform-adminconsole

Repositório com arquivos do teraform para criação de usuários e grupos no console admin do google workspace
HCL
16
star
47

livecodingthefuture-docker-terraform

Projeto Criado para salvar os Exemplos da Live Conding The Future. Realizando deploy de uma aplicação web em cloud com Docker, Terraform, Bard e ChatGPT
Dockerfile
15
star
48

matches-simulator-api

Repositório que simula uma API REST para obtenção de partidas.
15
star
49

trilha-react-desafio-4

TypeScript
14
star
50

inovatec-2022

Estrutura do Projeto de Inovação para o programa Inovatec da DIO
13
star
51

trilha-react-desafio-3

JavaScript
13
star
52

santander-dev-week-bankline-android

App Android Nativo criado durante a Santander Dev Week
Kotlin
12
star
53

linux-primeiros-passos

Repositório de referência para a mentoria "Seus Primeiros Passos no Linux".
11
star
54

santander-dev-week-2023-ios

Swift
10
star
55

banco-carrefour-techday-cloud-devops

Repositório dos arquivos do projeto base para o projeto Tech Day do Bootcamp “Cloud DevOps Experience - Banco Carrefour”
CSS
9
star
56

Sentiment-analysis-international-acceleration

Jupyter Notebook
8
star
57

soccer-news-api

API (provida via GitHub Pages) do App "Soccer News"
8
star
58

terraform-gcp

Exemplos praticas na aulas de Devops GCP
HCL
8
star
59

trilha-lua

Lua
7
star
60

front-end-meme-maker

CSS
7
star
61

work-manager

Kotlin
7
star
62

navigation-component

Kotlin
6
star
63

integrating_sql_databases_with_python_and_MongoDB

Python
6
star
64

python-flask

Repositório de Exemplo Aplicação Python com Docker
Python
6
star
65

vite-react-sample

a base project react with vite and tailwind
TypeScript
6
star
66

instalacaospinnakergcp

Repositório para instalacao do Spinnaker GCP
5
star
67

live-python-hyperautomation-botcity

Python
5
star
68

desafio02-ts

TypeScript
5
star
69

santander-dev-week-bankline-app

TypeScript
5
star
70

reactive-flashcards

API reativa com Spring WebFlux
Java
5
star
71

formacao-blockchain-dio

Repositório contendo os desafios de projeto da formação
Solidity
5
star
72

RestAPI-token_authentication

HTML
5
star
73

android-material

Kotlin
5
star
74

trilha-react-desafio-2

JavaScript
5
star
75

curso-ruby

Ruby
4
star
76

codecamps

Aqui vão estar os esboços dos CodeCamps para utilizarmos em projetos futuros
4
star
77

netflix-test-resolved

Python
4
star
78

desafio-reactor

HTML
3
star
79

reactive-bingo

Repositório com os requisitos do desafio de conclusão do curso Spring WebFlux
3
star
80

poc-legendas

Prova de Conceito (PoC) Usando Legendas no Player Nativo do HTML
HTML
3
star
81

desafio03-ts

TypeScript
3
star
82

santander-dev-week-2023-api

RESTful API da Santander Dev Week 2023 construída em Java 17 com Spring Boot 3.
Java
3
star
83

jetpack-compose

Kotlin
3
star
84

trilha-react-native-green-latern-app

App de overview do react native
TypeScript
3
star
85

desafio01-ts

TypeScript
3
star
86

APIAutomationProject

Automation tests with Rest Assured from Course +
Java
3
star
87

trilha-gcp-fundations-terraform-projetosfolders

Reposiório contento códigos do terraform para Trilha GCP com o objetivo de automatizar a criação de pastas e projetos.
HCL
3
star
88

trilha-net-azure-desafio

C#
3
star
89

ia-productive

3
star
90

transforma-tec-aula123

Java
2
star
91

trilha-react-native-navigation-drawer

A sample of React Native Drawer Navigation
TypeScript
2
star
92

santander-dev-week

2
star
93

datasets

Um coletânea de datasets para serem utilizados nas suas aplicações DIO
2
star
94

mapa-mental-data-ypes

2
star
95

dio-azureOpenAI

Conteudo do projeto Azure OpenAI
Python
2
star
96

projeto-base-spring-data-jpa

Projeto Base Spring Data JPA
Java
2
star
97

education-adm-customizations

JavaScript
2
star
98

ann-dio-careers

AWS C++ Lambda Fuction with an Artificial Neural Network (ANN) for DIO Careers.
C++
2
star
99

eletric-car-app

Kotlin
2
star
100

minhas-receitas-app

Projeto de minhas receitas apresentada no curso simplificando a persistência de sados no android com room​
Kotlin
1
star