• Stars
    star
    673
  • Rank 67,060 (Top 2 %)
  • Language
    Java
  • Created over 1 year ago
  • Updated 5 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,957
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
299
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
192
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

trilha-css-desafio-01

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

roadmaps

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

trilha-net-poo-desafio

C#
85
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