Manoel Campos Dev
Manoel Campos Dev
  • 123
  • 155 432
IntelliJ: principais recursos e truques do melhor IDE da galáxia - Parte 3
Este terceira e última parte da série de dicas e truques do IntelliJ continua mostrando
mais alguns recursos que te darão super produtividade ao programar neste IDE.
Capítulos
00:00 Apresentação
00:38 Convertendo arquivos para outros formatos
03:47 Usando Live Templates
05:36 Criando Live Templates
10:47 Definindo estrutura inicial de novos arquivos de qualquer tipo
Links
- Projeto de exemplo: github.com/manoelcampos/truques-intellij
- PlayList: ua-cam.com/play/PLyo0RUAM69Ut7MvWe8zeObESi32DGcJSR.html
- Download do IntelliJ Ultimate (versão paga) ou Community (versão gratuita): www.jetbrains.com/idea/
- Solicitar licença educacional do IntelliJ Ultimate (para professores e estudantes de tecnologia): www.jetbrains.com/community/education/
Переглядів: 52

Відео

IntelliJ: principais recursos e truques do melhor IDE da galáxia - Parte 2
Переглядів 70Місяць тому
Este segunda parte da série de dicas e truques do IntelliJ continua mostrando mais alguns recursos que te darão super produtividade ao programar neste IDE. Você vai aprender mais alguns atalhos, refatorações automatizadas e aprender a tirar o máximo de proveito dos recursos deste IDE super poderoso. Com o IntelliJ, você vai ver que pode dispensar uma série de outras ferramentas, como clientes p...
IntelliJ: principais recursos e truques do melhor IDE da galáxia - Parte 1
Переглядів 121Місяць тому
Este vídeo mostra uma série de truques, recursos e atalhos do IntelliJ que irão te tornar um desenvolvedor muito mais profissional e produtivo. Tais recursos irão fazer você perder menos tempo escrevendo código e realizando tarefas repetitivas no IDE. Ao longo desta série de vídeos, você vai dominar este IDE fantástico e não querer utilizar nenhum outro mais. O IntelliJ adicionalmente vai apren...
Criando suas próprias INTERFACES FUNCIONAIS em #JAVA
Переглядів 94Місяць тому
Neste vídeo te mostro a melhor forma de unir programação orientada a objetos com programação funcional em Java. Te mostro como criar métodos que recebem parâmetros do tipo de uma interface funcional como Function, sem precisar, no momento de chamar tais métodos, declarar explicitamente uma variável de tal tipo quando você não pode ou não quer passar uma Lambda no lugar. Apresento como você orga...
ERROS comuns de PROGRAMAÇÃO FUNCIONAL em JAVA - Parte 6: como garantir a ordem de elementos num Map
Переглядів 47Місяць тому
Neste sexto vídeo desta série, é mostrado que coletar dados de um mapa em um novo mapa usando os recursos de Stream em Java pode não garantir a ordem original dos dados. Isto ocorre pois o Collector toMap(), passado como parâmetro pro método Stream.collect(), retorna um HashMap que não garante a ordem dos dados. Assim, o vídeo mostra algumas alternativas ao HashMap, como LinkedHashMap e TreeMap...
ERROS comuns de PROGRAMAÇÃO FUNCIONAL em JAVA - Parte 5
Переглядів 302 місяці тому
ERROS comuns de PROGRAMAÇÃO FUNCIONAL em JAVA - Parte 5
ERROS comuns de PROGRAMAÇÃO FUNCIONAL em JAVA - Parte 4
Переглядів 432 місяці тому
ERROS comuns de PROGRAMAÇÃO FUNCIONAL em JAVA - Parte 4
ERROS comuns de PROGRAMAÇÃO FUNCIONAL em JAVA - Parte 3
Переглядів 592 місяці тому
ERROS comuns de PROGRAMAÇÃO FUNCIONAL em JAVA - Parte 3
ERROS comuns de PROGRAMAÇÃO FUNCIONAL em JAVA - Parte 2
Переглядів 682 місяці тому
ERROS comuns de PROGRAMAÇÃO FUNCIONAL em JAVA - Parte 2
ERROS comuns de PROGRAMAÇÃO FUNCIONAL em JAVA - Parte 1
Переглядів 802 місяці тому
ERROS comuns de PROGRAMAÇÃO FUNCIONAL em JAVA - Parte 1
Reaprendendo a criar loops com Streams numéricos em Java: IntStream, LongStream e DoubleStream
Переглядів 733 місяці тому
Reaprendendo a criar loops com Streams numéricos em Java: IntStream, LongStream e DoubleStream
Convertendo código procedural para funcional com lambdas, Streams e interfaces funcionais em Java
Переглядів 2073 місяці тому
Convertendo código procedural para funcional com lambdas, Streams e interfaces funcionais em Java
Os poderes do Stream.flatMap em Java - achatando uma estrutura de dados multidimensional
Переглядів 663 місяці тому
Os poderes do Stream.flatMap em Java - achatando uma estrutura de dados multidimensional
Mergulhando nos Streams de Java: Operações Intermediárias/Terminais e mais
Переглядів 634 місяці тому
Mergulhando nos Streams de Java: Operações Intermediárias/Terminais e mais
A preguiça pode otimizar seu código. Lazy evaluation: avaliação preguiçosa em Java com Lambda/Stream
Переглядів 1004 місяці тому
A preguiça pode otimizar seu código. Lazy evaluation: avaliação preguiçosa em Java com Lambda/Stream
Principais recursos da linguagem Java no JDK 22: você não vai mais viver sem eles
Переглядів 7544 місяці тому
Principais recursos da linguagem Java no JDK 22: você não vai mais viver sem eles
Reduzindo conjunto de dados com Stream.reduce() e Redescobrindo o tipo Map em Java
Переглядів 934 місяці тому
Reduzindo conjunto de dados com Stream.reduce() e Redescobrindo o tipo Map em Java
Dominando o tipo Optional em Java e o que é Null Safety
Переглядів 964 місяці тому
Dominando o tipo Optional em Java e o que é Null Safety
Dominando Predicate, Comparator e Collector em Java :: Programação Funcional
Переглядів 1885 місяців тому
Dominando Predicate, Comparator e Collector em Java :: Programação Funcional
Java Streams, boas práticas e Interfaces Funcionais :: Programação Funcional
Переглядів 1925 місяців тому
Java Streams, boas práticas e Interfaces Funcionais :: Programação Funcional
Programação Funcional em Java com Lambdas e Streams
Переглядів 2055 місяців тому
Programação Funcional em Java com Lambdas e Streams
O que você não sabia sobre Funções: o coração da Programação Funcional
Переглядів 1216 місяців тому
O que você não sabia sobre Funções: o coração da Programação Funcional
Imutabilidade: o fundamental que precisa saber para programar de forma funcional
Переглядів 1706 місяців тому
Imutabilidade: o fundamental que precisa saber para programar de forma funcional
Introdução à Programação Funcional: você nunca mais viverá sem isso
Переглядів 3496 місяців тому
Introdução à Programação Funcional: você nunca mais viverá sem isso
"A Arte da Simplicidade" por Venkat Subramaniam
Переглядів 3443 роки тому
"A Arte da Simplicidade" por Venkat Subramaniam
#2 Criando aplicação CLIENTE/SERVIDOR de CHAT em JAVA usando SOCKETS e THREADS
Переглядів 10 тис.3 роки тому
#2 Criando aplicação CLIENTE/SERVIDOR de CHAT em JAVA usando SOCKETS e THREADS
#2 Criando THREADS em JAVA e TURBINANDO o TEMPO de RESPOSTA das suas APLICAÇÕES 🚀🧵☕️
Переглядів 1,5 тис.3 роки тому
#2 Criando THREADS em JAVA e TURBINANDO o TEMPO de RESPOSTA das suas APLICAÇÕES 🚀🧵☕️
#4 Padrão de Projetos TEMPLATE METHOD: quase TUDO que PRECISA SABER
Переглядів 5383 роки тому
#4 Padrão de Projetos TEMPLATE METHOD: quase TUDO que PRECISA SABER
#1 O que são THREADS e porque TODO DEV precisa conhecer tal recurso
Переглядів 1,4 тис.3 роки тому
#1 O que são THREADS e porque TODO DEV precisa conhecer tal recurso
#3 ♟☕️Padrão de Projetos STRATEGY com PROGRAMAÇÃO FUNCIONAL no Java 8
Переглядів 8643 роки тому
#3 ♟☕️Padrão de Projetos STRATEGY com PROGRAMAÇÃO FUNCIONAL no Java 8

КОМЕНТАРІ

  • @WaGames
    @WaGames 2 дні тому

    obrigado pela aula

  • @douglasdj3638
    @douglasdj3638 17 днів тому

    excelente, alguns heróis não usam capa

  • @danisonsantos3869
    @danisonsantos3869 20 днів тому

    Conteúdo de altíssimo nível, professor! Obrigado por fazer isso pela comunidade!

    • @manoelcamposdev
      @manoelcamposdev 19 днів тому

      Obrigado Danison. Valeu por assistir. Fico feliz q tenha gostado 🙌🏼

  • @Greatmakeamo
    @Greatmakeamo 25 днів тому

    Fala cara, a sua dica e boa mas cara, para um ignorante por exemplo, ele nao passa da parte do repositorio, porque voce tem repositorio mas quem nao tem fica sem saber o que fazer porque vice nao explicou.

  • @rauniii
    @rauniii 26 днів тому

    Professor ainda não assisti os próximos vídeos, mas me deparei com uma situação esse dias onde um precisava altera o nome de inúmeros( +400 ) arquivos que tinha "_en.json" e tinha que muda-los para "_pt-br.json" tentei fazer pela IDEA mas não tive muito sucesso. Se o senhor poder fazer um vídeo sobre ou me indicar um sobre. E se esse recurso de rename Path de vários arquivos é exclusivo do Ultimate...

    • @manoelcamposdev
      @manoelcamposdev 26 днів тому

      Eu não falei disso nos vídeos. Nunca usei o recurso. Como estou em viagem, não devo conseguir ver pra você. Mas assim que possível dou uma olhada e te falo.

  • @danrocha5153
    @danrocha5153 Місяць тому

    Obrigado professor!! Esse recurso de Language Injection é muito top, não conhecia...

  • @ukissykulembe
    @ukissykulembe Місяць тому

    Gostaria de saber quais são os livros nas quais o Sr. tem estudado ou estudou para entender o Java Funcional.

    • @manoelcamposdev
      @manoelcamposdev Місяць тому

      Comecei a programar de forma funcional há cerca de 10 anos. Então, ao longo desse tempo, teve muito material que consumi que não vou lembrar mais. Mas onde eu mais aprendi foi em um curso da Oracle (apenas em inglês). O restante, foi bastante prática ao longo desses 10 anos. Tem os links desses vários materiais neste repositório do GitHub: github.com/manoelcampos/curso-programacao-funcional-java O último livro que li foi esse aqui: www.amazon.com.br/gp/product/B0B9G4HBKP/ref=ppx_yo_dt_b_d_asin_title_351_o07?ie=UTF8&psc=1

  • @ukissykulembe
    @ukissykulembe Місяць тому

    Esse vídeo chegou na hora exacta 😢🎉😂

  • @danrocha5153
    @danrocha5153 Місяць тому

    Muito top professor, não conhecia alguns desses atalhos, obrigado! Tem um plug-in muito legal chamado Key Promoter X, ele notifica o usuário quando este executa uma ação com o mouse que possui atalho de teclado correspondente, assim, ajuda o desenvolvedor a aprender atalhos do teclado.

    • @manoelcamposdev
      @manoelcamposdev Місяць тому

      Não conhecia esse. Já vou instalar. Valeu pela dica 😉

  • @suportetecnologia3141
    @suportetecnologia3141 Місяць тому

    Top

  • @Djairsoaresdjhanlj
    @Djairsoaresdjhanlj Місяць тому

    O homem, a maquina, ótimo contéudo.

  • @danrocha5153
    @danrocha5153 Місяць тому

    Aula muito top 👏🏼👏🏼 obrigado professor 👍🏼

    • @manoelcamposdev
      @manoelcamposdev Місяць тому

      Valeu Danilo. Fica ligado que vem mais por aí ✌️

  • @trasherdave
    @trasherdave Місяць тому

    Excelente! 🚀

  • @rafaelbaleeiro9554
    @rafaelbaleeiro9554 Місяць тому

    isHomem kkkk o portugles, meus codigo tbm são assim

    • @manoelcamposdev
      @manoelcamposdev Місяць тому

      Detesto isso também, mas não tem muito o q fazer. Se faz tudo em inglês, vai ter coisas estranhas como isValidCPF, mas ainda é menos mal

  • @niltonfernandes7928
    @niltonfernandes7928 Місяць тому

    melhos explicação impossivel

  • @kynio08
    @kynio08 2 місяці тому

    O UA-cam informou que existem 2 aulas indisponíveis ocultas. Não entendi. Mas de qualquer forma assisti até o momento a todas as super aulas criadas. Agora irei voltar no início re refazer uma a uma. Isso dará tempo de novas aulas serem introduzidas. Muito obrigado por disseminar estes conhecimentos.

    • @manoelcamposdev
      @manoelcamposdev 2 місяці тому

      Elas estão programadas pra liberar toda 5a feira ✌️

  • @kynio08
    @kynio08 2 місяці тому

    O Like é garantido antes mesmo de iniciar as expicações.😀

  • @kynio08
    @kynio08 2 місяці тому

    Muito boa as aulas. Ou melhor, boa é apelido. Muito ricas as explicações e dicas

  • @kynio08
    @kynio08 2 місяці тому

    Fantástico as explicações

    • @manoelcamposdev
      @manoelcamposdev 2 місяці тому

      Valeu. Toda semana está tendo aula nova ✌️

  • @danrocha5153
    @danrocha5153 2 місяці тому

    👏👏👏👏

  • @WellingtonParreira
    @WellingtonParreira 2 місяці тому

    Excelente vídeo. 👏👏Já cometi esse erro e demorei para sair dele. Hehehe.

    • @manoelcamposdev
      @manoelcamposdev 2 місяці тому

      Vc sabe q deveria ser coautor desses vídeos né? 😂😂😂

  • @WellingtonParreira
    @WellingtonParreira 2 місяці тому

    Muito bom! Eu já conhecia esse 'switch' mas de modo geral eu uso o 'switch' em casos muito específicos. Um erro meu, talvez falta de oportunidades/visão. Esses vídeos/aulas são excelentes.

    • @manoelcamposdev
      @manoelcamposdev 2 місяці тому

      Pois é, o novo switch torna o código mais sucinto ✌️

  • @richardsonhmm
    @richardsonhmm 2 місяці тому

    ❤😎

  • @WellingtonParreira
    @WellingtonParreira 2 місяці тому

    Excelente vídeo. 👍👍Fiz o sync do projeto e vi que o JDK foi atualizado para a versão 22. Eu estou usando a versão 21 LTS e não rodou. Teria um modo de compatibilidade para o projeto? Tive que instalar a versão 22 para poder trabalhar nele. Grato.

    • @manoelcamposdev
      @manoelcamposdev 2 місяці тому

      Vc pode tentar alterar a versão do Java no Pom.xml e reabrir e projeto. Mas se eu estiver usando recursos de Java 22, não vai funcionar

    • @manoelcamposdev
      @manoelcamposdev 2 місяці тому

      E pelo IntelliJ vc pode baixar qualquer versão do JDK

  • @vilhalva100
    @vilhalva100 2 місяці тому

    Eu vi do futuro (2024): Pra avisar que não é mais necessário usar o `nodemon`. Com a atualização recente do NODEJS e NPM, ele atualiza automaticamente quando há alguma alteração no código.

    • @manoelcamposdev
      @manoelcamposdev 2 місяці тому

      Sim, tem o parâmetro -watch que era experimental. Mad até onde eu saiba, ele só detecta alterações no arquivo inicial q vc passou pro comando node. Se ainda for assim, o nodemon continua sendo útil

  • @denercoelho2592
    @denercoelho2592 3 місяці тому

    Você poderia fazer uma interface gráfica para esse chat?

    • @manoelcamposdev
      @manoelcamposdev 3 місяці тому

      Não é muito prático. Da pra fazer com JavaFX. Tem aula aqui no canal. Mas tem um curso completo mostrando como construir um chat com WebSocket e Node.js

    • @denercoelho2592
      @denercoelho2592 3 місяці тому

      @@manoelcamposdev onde eu encontro este curso? Eu queria fazer um chat distribuído com sockets e uma interface simples para teste, sabe onde encontro para fazer?

    • @manoelcamposdev
      @manoelcamposdev 3 місяці тому

      Nad playlists do canal

  • @matheusfr17x
    @matheusfr17x 3 місяці тому

    aula muito boa

  • @erickdecker6513
    @erickdecker6513 3 місяці тому

    Professor como faz quando é Bidimensional, eu vi uma abordagem que dividia a linha em um método específico e a coluna em outro é tipo assim?

    • @manoelcamposdev
      @manoelcamposdev 3 місяці тому

      Precisaria de um exemplo para entender o q deseja. Mas o método flatMap pode ser usado para estruturas multidimensionais. Tem uma aula só sobre o flatMap no curso mais à frente

    • @erickdecker6513
      @erickdecker6513 3 місяці тому

      @@manoelcamposdev grato, estou chegando nele é que durante os videos me surgiu essa duvida.

  • @erickdecker6513
    @erickdecker6513 3 місяці тому

    Conhecimento absurdo

  • @L_Vinicius77
    @L_Vinicius77 3 місяці тому

    Olá professor, tive um projeto na faculdade com o mesmo tema (threads e sockets) ao longo do desenvolvimento, percebi que o socket.accept() era uma chamada bloqueate e que precisava de uma thread específica pra lidar com o recebimento das mensagens. Tava com dificuldade de ajustar essa parte e o vídeo ajudou demais.

  • @erickdecker6513
    @erickdecker6513 3 місяці тому

    Pqp parabéns, os de tdd também são ótimos 🎉 traz uma play List de Github ci/cd com Java por favor

    • @manoelcamposdev
      @manoelcamposdev 3 місяці тому

      Obrigado pelo comentário. Pretendo fazer um curso de git e GitHub do jeito certo, mas tou trabalhando em um de programação funcional e esse vai levar tempo 😊

  • @danrocha5153
    @danrocha5153 3 місяці тому

    Valeu professor 👏👏👏

  • @rauniii
    @rauniii 4 місяці тому

    Gloria a Deus Interpolação de String em java; Mas ainda achei esquisito o role do processador de String... Nunca tinha nem Ouvido falar. No curso de Funcional o senhor já irá implementar alguma dessas novas funcionalidades ??

    • @manoelcamposdev
      @manoelcamposdev 4 місяці тому

      Não, foge do foco. Mas no vídeo tem um exemplo para gerar um objeto JSON. Podia fazer outro depois para criar um processador de SQL para evitar SQL infection ✌️

  • @richardsonhmm
    @richardsonhmm 4 місяці тому

  • @maurodeboni
    @maurodeboni 4 місяці тому

    Mais uma excelente aula, Professor! Valeu por compartilhar!!

    • @manoelcamposdev
      @manoelcamposdev 4 місяці тому

      Valeu prof. Mauro 🙌🏼

    • @maurodeboni
      @maurodeboni 4 місяці тому

      @@manoelcamposdev não deixe de publicar no canal, o conteúdo dele é muito interessante e esse ano o UA-cam está pagando melhor que no ano passado!😂😂😂

    • @manoelcamposdev
      @manoelcamposdev 4 місяці тому

      @@maurodeboni vamos juntos. Ninguém solta a mão de ninguém 😂

  • @rauniii
    @rauniii 4 місяці тому

    Professor o senhor falou sobre o filter, limit e skip; E até exemplificou com o filter... Testando aqui substitui o count pelo reduce, então os map's passaram a ser uteis, então se eu entendi bem, se tiver algum método que por mais que esteja alterando os valores, mas esse não forem usados depois o stream ira desconsiderar ele, correto !? Quais ouros métodos teriam o mesmo comportamento do count e porque ?

    • @manoelcamposdev
      @manoelcamposdev 4 місяці тому

      Exato. Se os dados retornados pelo map não são usados, o map é executado apenas para guardar a função que você passou, mas não executará tal função. Não vou saber todas as situações onde o map é totalmente ignorado. Além do count, tem o isEmpty(), que verifica se o stream retornou algum dado ou não. Neste caso, os dados não me importam, só quero saber se retornou alguma coisa. Um método como map ou filter pedem uma interface funcional, que apenas indica o tipo de função que devemos passar para eles. A maior parte do tempo estamos criando funções lambda para passar para tais métodos. Mas existem algumas funções como Predicate.not (que já vimos) e Function.identity(). Esta última é uma função que recebe um valor e devolve o mesmo valor. Uso muito quando quero pegar uma lista e criar um mapa (HashMap) a partir desta lista. Por exemplo, o código abaixo tem uma lista de nomes de cidades e quero criar um mapa onde a chave é a própria cidade e o valor associado a cada chave é o total de letras da cidade: final var cidades = List.of("Palmas", "Salvador", "Belo Horizonte"); final Map<String, Integer> cidadesLetrasMap = cidades.stream() .collect(Collectors.toMap(Function.identity(), String::length)); cidadesLetrasMap.forEach((cidade, letras) -> System.out.println(cidade + " -> letras: " + letras)); O Collector toMap recebe duas funções (que recebem a cidade e devolvem alguma coisa). No primeiro parâmetro do toMap passei o Function.identity() para indicar que quero receber a cidade que veio da lista e retornar ela sem alterações. Tal valor será usado como a chave do mapa. No 2o parâmetro do toMap passei a função length da classe String. Tal função vai ser chamada e receberá também a cidade, mas retorna o total de caracteres dela. Rode e veja o resultado. Perceba que a Function.identity() tem uma finalidade aqui: usar a cidade como está. Ela é uma alternativa a vc escrever uma lambda como cidade -> cidade (que recebe a cidade e retorna sem alteração). Mas se você usar a Function.identity() no exemplo abaixo, ela não terá qualquer utilidade: final int soma = Interceptor .stream(numeros) .map(Function.identity()) .reduce(Integer::sum) .orElse(0); System.out.println(soma); Se vc só quer a soma dos números e o map vai retornar cada número do jeito que recebeu (ou seja, sem alterar), ele não faz sentido. O IDE vai te falar que esta operação é desnecessária, mas não sei se o Stream tem a capacidade de identificar que passamos a função identity e perceber que ela é inútil neste caso. O Stream não sabe o que a função que você passa para métodos como map e filter faz. Tais métodos não tem como saber se o valor está sendo alterado ou não. Então a análise é mais superficial. De qualquer maneira, ele teria como saber se eu passei a Function.identity() como parâmetro e assim perceber que ela é inútil neste último exemplo. Mas não tenho certeza se Stream faz isso. Teria que sobrescrever o método map para interceptar as chamadas dela. Isso já é bem mais complicado do que o Interceptor que criei no projeto.

    • @raunerlucasa.amaral9465
      @raunerlucasa.amaral9465 4 місяці тому

      @@manoelcamposdev Acredito que entendi ! Obrigado gostei desse exemplo ficou mais incisivo a ideia.

  • @oliveiraysa_dev
    @oliveiraysa_dev 4 місяці тому

    Excelente didática 😊

  • @oliveiraysa_dev
    @oliveiraysa_dev 4 місяці тому

    👏🏻👏🏻👏🏻👏🏻

  •  4 місяці тому

    Professor, você é tão bom que faz até o Java parecer bom tb. Abraço

    • @manoelcamposdev
      @manoelcamposdev 4 місяці тому

      😂😂😂. Com certeza prefiro Kotlin, mas a base de código em Java, inclusive de projetos próprios, é tão grande que não tem jeito.

  • @danrocha5153
    @danrocha5153 4 місяці тому

    Obrigado professor 👍

  • @oliveiraysa_dev
    @oliveiraysa_dev 4 місяці тому

    👏🏻👏🏻👏🏻

  • @WaGames
    @WaGames 4 місяці тому

    nossa ainda estou trabalhando com o jdk6

  • @richardsonhmm
    @richardsonhmm 4 місяці тому

    👏🏻👏🏻👏🏻❤

  • @rauniii
    @rauniii 4 місяці тому

    Professor, minha a duvida é a seguinte: Por que o forEach do map não gera alterações ?? (Ao replicar o video o intellij me sugere para essa versão de cod ) mapPessComanda.forEach((key, value) -> { double v = value >= 10 ? value * 0.5 : value; System.out.println(key + " -- " + v); }); System.out.println(); mapPessComanda.forEach((chave, valor) -> System.out.println(chave + " -> " + valor)); Pq no video o senhor usou o .entrySet().stream().forEach() Por isso fiquei em duvida eles funcionam da mesma form ??

    • @manoelcamposdev
      @manoelcamposdev 4 місяці тому

      Nenhum forEach de fato altera a estrutura que vc tá percorrendo (seja um List, Map, etc). O que fizemos foi apenas mostrar os dados alterados, sem alterar o mapa original. E sim, neste caso é bem mais simples fazer como você mostrou: usar o forEach diretamente no map. Só mostrei do outro jeito porque é uma possibilidade (mas era pra ter incluído um exemplo melhor). Imagina que vc não quer alterar o map original, e sim criar um novo map dando 10% de desconto pra todo mundo. Com o map.entrySet().stream() conseguimos fazer isso: // faz o import abaixo para o código ficar mais simples // import static java.util.AbstractMap.SimpleEntry; var novoMap = mapPessoaComanda .entrySet() .stream() .map(entry -> new SimpleEntry<>(entry.getKey(), entry.getValue() * 0.9)) .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); novoMap.forEach((nome, val) -> System.out.printf("%s: %f ", nome, val)); Veja que o código é um pouco mais complicado. Estou percorrendo as entradas (entry) e criando uma nova, onde a chave é a mesma da entrada atual e o valor é o atual com 10% de desconto. Em seguida, eu coleto para um novo mapa, onde a chave e o valor são os mesmo da nova entrada que criei antes do collect. Esse é um exemplo que é mais complexo e é um dos casos onde usar um for tradicional vai ser mais simples. Por isso, que não temos como nos ver livres de programação estruturada.

    • @manoelcamposdev
      @manoelcamposdev 4 місяці тому

      Mas existem outras alternativas de fazer isso também, cada uma com seus prós e contras.

  • @viniciusfranciscopradosilv2121
    @viniciusfranciscopradosilv2121 4 місяці тому

    Nuu em 30 minutos aprendi meses. Valeu por compartilhar!

    • @manoelcamposdev
      @manoelcamposdev 4 місяці тому

      Valeu. Se liga nas próximas aulas 🙌🏼

  • @HCAPereira
    @HCAPereira 4 місяці тому

    Muito boa a aula prof. Manoel Campos

  • @matheuseinszwei6915
    @matheuseinszwei6915 4 місяці тому

    Muito boa aula, professor! No caso da programação funcional, não seria mais custoso o processamento? Visto que estamos fazendo três operações de manipulação de array.

    • @manoelcamposdev
      @manoelcamposdev 4 місяці тому

      Em Java ele vai percorrer a lista apenas uma vez e tem um recurso de lazy evaluation que vou falar em aulas futuras, usado internamente para não executar operações desnecessárias. De toda forma, para um conjunto pequeno de dados, usar programação funcional normalmente será mais custoso computacionalmente, pois tem mais chamadas de função, mais variáveis sendo criadas e mais detalhes internos. Mas em geral, essa perda de desempenho é irrelevante, imperceptível. Se o volume de dados é grande, aí temos streams paralelas que neste caso podem melhorar absurdamente o tempo de processamento, usando múltiplas CPUs

    • @manoelcamposdev
      @manoelcamposdev 4 місяці тому

      Veja a aula sobre Lazy Evaluation em Java e JS ua-cam.com/video/_WcVp9gneNA/v-deo.htmlsi=8TfzDDj46_ic1jiD

  • @NSjoao3
    @NSjoao3 4 місяці тому

    Que aula incrível, por que só descobri essa playlist agora??kkkk

  • @trasherdave
    @trasherdave 4 місяці тому

    Conteúdo top! Utilizar o Optional da maneira correta com certeza evita erros de bilhões de dólares 🤣

    • @manoelcamposdev
      @manoelcamposdev 4 місяці тому

      Pois é, vamos escrever código de qualidade 😊

  • @danrocha5153
    @danrocha5153 4 місяці тому

    Ótima aula professor, obrigado 👏👏👏