Oi pessoal meu nome é Paulo Silveira eu vou ser o instrutor de vocês nesse curso do Java 8 nosso objetivo aqui é encarar as novidades que essa versão que saiu no começo de 2014 trouxe pra linguagem tem muitas coisas do dia a dia que a gente fazia que demorava dava muito trabalho para escrever até a versão do Java 7 as outras linguagens até tiravam um pouco T sarro não é olha no Ruby no C Sharp no Scala no Python é muito mais fácil de você pegar e vasculhar um monte de objetos para saber quais que
são os que tem linha ímpar para você saber quais que são os que TM mais de cinco caracteres para você ordenar para você remover elementos para você trabalhar com coleções de elementos você di que escrever bastante código e agora o Java 8 trouxe uma série de mudanças na linguagem inclusive são três as principais que nós vamos ver aqui desde o método Def até o lambda até os métodos reference Tá certo depois disso a gente vai ver um pouco de api a gente a gente vai ver Strings collectors data e optionals para você começar você precisa
ter o Java 8 instalado E além disso você pode escolher seja Eclipse ou netbeans com suporte a java 8 o eclipse já tem esse suporte no Kepler basta você instalar um plugin tanto o Java 8 esse plugin tem aí no texto do nosso curso os links caso você precise ou Eclipse Luna em diante já tem esse suporte Tá certo Eh vamos criar o nosso novo projeto e trabalhar com um pouco dessas dificuldades do dia a dia que a gente faz do Java que o código costuma ficar longo vamos ver esses exemplos para depois aplicar o
Java 8 de pouco em pouco e você poder também migrar o seu código e saber utilizar essas novas features tá vamos criar um novo projeto aqui um projeto Java no Eclipse lembre-se Verifique que a versão do Java 8 tá disponível para você caso ela não esteja você também pode seguir os passos do texto você pode ir em Windows preference verificar a pasta Java a installed JRS e ali Você pode adicionar a versão do java8 caso ela ainda não esteja adicionada vou escolher aqui Java 8 crii um projeto que se chama Java 8 um projeto de
teste e a gente vai criar aqui uma classe que vai se chamar ordena ordena Strings ela simplesmente vai ter um um M aqui dentro a gente vai ter uma classe um um método Main né no equilí eu faço o Main contra o espaço ele já preenche pra gente aquele esqueleto control shift F ele já organiza tudo e o que que a gente vai fazer aqui dá numa lista de string eu quero orden vamos fazer do jeito velho e ver o sofrimento que era então a gente vai criar aqui usando a interface list uma lista de
string eu vou criar aqui essa lista que vai se chamar palavras e ela vai ser uma nova Array list de Strings eu vou aqui por exemplo adicionar algumas palavras eu vou adicionar por exemplo o alur online eu vou adicionar além do alur online eu vou adicion a editora casa do código correto e outras palavras você po fazer o teste que você preferir Editora a casa do código correto e por último eu vou adicionar também a Kelo por exemplo você poderia usar também o arrays as list caso você já conheça como a gente faz para ordenar
isso aqui a gente utiliza aquelas classes auxiliares do Java útil no nosso caso aqui é uma classe que se chama collections com s no final cheia de métodos estáticos Como por exemplo o método sorte e eu posso passar aqui como argumento as palavras tá bem caso eu faça isso e Imprima a nossa lista de palavras ela vai sair ordenada em ordem alfabética em ordem lexicográfica do a a z Tá certo vamos fazer o teste cliquei aqui da direita Run s e eu escolhi Java application vamos ver se ele sai da forma correto aura KL editor
casa do código Tudo bem ele tá ordenando de acordo com o critério de comparação de um string se você abrir o código fonte da classe string você vai ver que ela implementa comparable e ela sempre compara de acordo com de a a z não é dessa forma que a gente quer se não é dessa forma que a gente quer como que eu falo que eu quero ordenar palavras de uma outra forma se você já conhece um pouco da api Você sabe que na api das collections existe uma outra interface que se chama comparator ela é
responsável por você implementar E poder dizer olha essa string vem antes essa string vem depois essa string empata dado esse critério de comparação através do comparator você pode ordenar essa sua lista de Strings por um outro critério Vamos criar essa classe Então essa classe vai se chamar é comparador por tamanho ela precisa Obrigatoriamente implementar essa interface que se chama comparator e eu vou falar que ela é uma comparator de Strings o eclipse aqui tá reclamando porque falta implementar o método correto você implementa uma interface você é obrigado a ter aquele método os métodos que aquela
interface diz ou declarar a classe como abstrata tô aqui adicionando os métodos e tô adicionando vou só mudar um pouco né vou deletar esse código aqui eu dei o cont control um para adicionar os métodos vou deletar o comentário vou mudar aqui as Strings só para ficar mais bonitinho string S1 string S2 se você ler a documentação dessa interface ou passar o mouse aqui em cima for ler o jav dooc desse método vai ler que é que ele fala aqui se o primeiro elemento for vir antes do segundo elemento você deve retornar o número negativo
Se ele vier depois do do segundo elemento deve devolver um número positivo e por último se der um empate você deve devolver zero mas o que quer dizer vir antes vir depois ou Zero Isso depende de você é você que vai escolher se ele deve vir antes ou vir depois no nosso caso vai depender do length da string Então o que a gente vai fazer aqui é uma série de comparações se a primeira string o tamanho dela for menor que o tamanho da segunda string nesse caso a gente vai retornar o número negativo menos um
ou o que você quiser caso contrário ele já vai já deu return você não precisa nem escrever o else aqui né porque se caiu nesse caso ele já saiu pelo return então eu vou pôr aqui if se for outro caso né se o Len desse cara do primeiro elemento for maior que o do S2 o que a gente faz nesse caso a gente retorna um número positivo e por último a gente retorna a zero Tá certo no caso de dar o empate tá bem se a gente já tem esse comparador aqui pronto como que eu
faço para que na nossa ordenação utilizar esse outro critério bem basta a gente criar um objeto desse tipo então eu vou criar um comparator de string o que eu vou chamar de comparador e vai ser desse nosso tipo novo que a gente criou que é o comparador por tamanho correto basta você passar aqui como segundo argumento vírgula esse novo comparador que aí em vez do que ele usar comparação natural isso é a comparação que a própria classe string definiu dentro da sua classe A gente tá usando esse novo critério que a gente escreveu Vamos tentar
rodar para ver o que acontece e ver como que muda a saída vou rodar aqui e vamos ver a saída Olha lá primeiro v a celon depois a lur online depois Editora casa do código por quê kelon menor e assim por diante os outros elementos Tudo bem se você mostrar isso para alguém que já trabalha contra as linguagens que tem uma sintaxe um pouco mais enxuta e outros recursos que o Java até o Java não existiam você vai ver que o código deles é muito menor do que escrever tudo isso aqui tudo bem eh e
o primeiro motivo desse caso aqui aqui é a gente não ficar usando esse monte tá vendo esse Collection sorte aqui esse método auxiliar dentro de uma classe que chama Collection cheio de método estático a gente até sabe que na orientação objeto nem fica tão bonito ter classes cheio de método estático métodos que nem classe útil é claro que às vezes tem essa necessidade mas nem sempre é tão bonito o que que acontece agora no Java 8 A gente não precisa mais escrever assim você pode escrever de uma outra forma agora a própria list tem um
método Adivinha que se se chama sorte e que recebe um comparator então eu posso passar aquele comparador que a gente criou e o resultado dessa invocação ou dessa invocação é o mesmo quer ver vamos rodar de novo aqui o código e ver o que acontece a mesma saída se você já tá acostumado com Java até a versão 7 você vai saber que esse método sorte nunca existiu na interface list nem na relist nem nas interfaces mes de list que é a Collection e a iterable Então como é que que aconteceu que agora tem um novo
método nessa interface se você for ver o código a gente pode abrir o código fonte do Java 8 se você segurar o control aí o Command no Mac o control e e clicar ou apertar o F2 lá você pode abrir o código fonte da interface lista o código fonte da interface lista vai te revelar uma surpresa existe assim como existem diversos métodos antigos da lista existem métodos Como por exemplo o sorte só que dessa vez ele não tem ponto e vírgula ele abre Chaves e fecha Chaves isso é não é um método abstrato é um
método que tem corpo dentro de uma interface e até a versão do javet isso não era possível interfaces não podiam ter métodos concretos apenas métodos abstratos Então essa é a primeira novidade que a gente tá enxergando ela se chama não à toa default methods um método dentro de uma interface que queira ter um corpo ele precisa ter esse modificador Def essa palavra-chave ao lado dele o o que que isso quer dizer isso quer dizer que agora suas interfaces Podem sim declarar novos métodos de uma maneira compatível com classes que já existiam porque se eles tivessem
adicionado simplesmente o método sorte na interface list um método abstrato o que que ia acontecer todo mundo que implementa list seja relist ou seja as listas do hibernate seja listas do apach Collection elas iam quebrar elas iam parar de funcionar porque elas não TM aquele método se você adiciona métodos inescrupulosos mente em interfaces o que que acontece todo mundo que implementa aquelas interfaces é obrigado a ter aqueles métodos se eles não TM eles param de compilar então incluir esses default metodos que também não é novidade em outras linguagens existem existe esse recurso parecido incluir esse
recurso permite a evolução de uma interface sem que a gente quebre as classes antigas que já implementava essa interface tá bem é uma estratégia de evolução de interfaces ok eh existem outros métodos de na interface list na interface Collection assim por diante durante o curso a gente vai ver alguns que são muito importantes Ok inclusive voltando aqui vamos já ver um outro que normalmente se a gente quer imprimir um monte de elementos a gente costuma fazer aqui o o enhanced for né eu faço assim para cada string eu vou chamar de p dentro de palavras
faça sistem out print LN cont control espaço sistem do P Tá certo e o que que eu vou fazer aqui eu vou fazer aqui uma outra forma de iterar em todos os elementos sem ser esse forz inho bonitinho ó vou executar vocês vão ver que o O resultado é esperado aparece um por linha existe agora no Java uma outra forma de fazer esse for it né Essa iteração em cada elemento da minha coleção agora o palavras isso é a minha lista tem um método que se chama for it e que recebe um consumer um consumer
que eu vou chamar aqui consumidor essa variável ainda não existe por quê Porque eu preciso criar mas para eu criar essa variável consumer que consome Strings eu vou precisar de uma classe que a implementa vou começar aqui com o nul só pro código compilar e a gente vai criar agora aqui uma classe que implementa essa interface consumidora porque o forit recebe um consumidor de Strings então eu vou criar aqui uma classe que se chama imprime na linha e ela vai implementar essa nova interface do Java 8 que se chama consumer entraram muitas interfaces novas no
Java 8 se você for ver ela é de um pacote que se chama Java Util function tem várias outras a gente vai conhecer diversas delas e aqui eu vou implementar o método se eu vier aqui der um control um ou clicar aqui no amarelinho de ideia e vai ter a opção implementar o método eu vou implementar esse método se chama accept ele recebe um string e tem aqui o corpo o que que eu vou fazer toda vez que eu for consumir uma string o que eu vou fazer aqui eu vou fazer um System out print
LN nessa string Tá certo um método bem bem simples não é é muito trivial eu tô simplesmente dado uma string imprime essa string e agora eu posso fazer aqui nesse consumidor eu posso dar um New nessa nossa classe que se chama imprime na linha e passar esse consumidor como argumento Tá bem vou deletar o for antigo daquele formato antigo vou eh eu vou comentá-lo tá bem eu vou pegar esse for aqui e comentar o código se eu executar o nosso código aqui o que que acontece O resultado vai ser exatamente o mesmo tá certo por
que isso porque esse consumidor aqui é uma forma nova de iterar em todos os elementos de uma coleção adivinha esse forit não existia antes nem list nem Collection nem ter se você D um control click aqui for entrar no código fonte você vai ver que ele é um novo método da interface iterable se você não conhece interface iterable é a mãe de Collection todas as collections são etables ela tem aquele método que se chama iterator é ela que garante que todo toda a coleção é iterável você tem aquele iterator que hoje em dia a gente
até usa pouco tá bem como que eles conseguiram adicionar Esse novo método simplesmente porque ele é um método Def Se ele não fosse um método default não se conseguiria adicionar um novo método na interface sem quebrar todas as coleções que já existiam sem esse tal do for it então aqui eu tô começando a gente tá começando no nosso curso de Java 8 vendo o primeiro recurso o mais básico são os métodos Def que que eles fazem permite que você Adicione um novo método numa interface e esse método seja concreto ele tenha corpo e ele seja
de certa forma herdado só um adendo ele não é como uma classe abstrata uma classe abstrata Você pode ter atributos Você pode ter estado uma interf não pode mesmo no Java 8 ter estado ela só pode ter métodos concretos que chamam ou outros métodos estáticos de fora ou métodos do próprio objeto ou do objeto passado como argumento vamos ver logo em seguida o lambda Não deixe de fazer os exercícios e ver os outros links que a gente deixou aí no texto