Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Java 8 - Guia rápido

Java 8 - Visão geral


JAVA 8 é uma versão principal do desenvolvimento da linguagem de programação JAVA. Sua versão inicial foi lançada em 18 de março de 2014. Com o lançamento do Java 8, o Java forneceu suporte para programação funcional, novo mecanismo JavaScript, novas APIs para manipulação de data e hora, nova API de streaming, etc.

Novos recursos


Considere o seguinte trecho de código.
Demonstração ao vivo
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;

public class Java8Tester {

   public static void main(String args[]) {
   
      List<String> names1 = new ArrayList<String>();
      names1.add("Mahesh ");
      names1.add("Suresh ");
      names1.add("Ramesh ");
      names1.add("Naresh ");
      names1.add("Kalpesh ");
		
      List<String> names2 = new ArrayList<String>();
      names2.add("Mahesh ");
      names2.add("Suresh ");
      names2.add("Ramesh ");
      names2.add("Naresh ");
      names2.add("Kalpesh ");
		
      Java8Tester tester = new Java8Tester();
      System.out.println("Sort using Java 7 syntax: ");
		
      tester.sortUsingJava7(names1);
      System.out.println(names1);
      System.out.println("Sort using Java 8 syntax: ");
		
      tester.sortUsingJava8(names2);
      System.out.println(names2);
   }
   
   //sort using java 7
   private void sortUsingJava7(List<String> names) {   
      Collections.sort(names, new Comparator<String>() {
         @Override
         public int compare(String s1, String s2) {
            return s1.compareTo(s2);
         }
      });
   }
   
   //sort using java 8
   private void sortUsingJava8(List<String> names) {
      Collections.sort(names, (s1, s2) -> s1.compareTo(s2));
   }
}

Execute o programa para obter o seguinte resultado.
Sort using Java 7 syntax:
[ Kalpesh Mahesh Naresh Ramesh Suresh ]
Sort using Java 8 syntax:
[ Kalpesh Mahesh Naresh Ramesh Suresh ]

Aqui o sortUsingJava8() O método usa a função de classificação com uma expressão lambda como parâmetro para obter os critérios de classificação.

Java 8 - Configuração do ambiente

Configuração do ambiente local


Se você deseja configurar seu próprio ambiente para a linguagem de programação Java, esta seção o guiará por todo o processo. Siga as etapas abaixo para configurar seu ambiente Java.

Java SE pode ser baixado gratuitamente no seguinte link −

https://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

Você baixa uma versão baseada em seu sistema operacional.

Siga as instruções para baixar o Java e execute o .exe para instalar o Java em sua máquina. Depois de instalar o Java em sua máquina, você precisa definir variáveis ​​de ambiente para apontar para os diretórios de instalação corretos.

Configurando o caminho para Windows 2000/XP


Supondo que você tenha instalado o Java no diretório c:\Program Files\java\jdk −

Configurando o caminho para Windows 95/98/ME


Supondo que você tenha instalado o Java no diretório c:\Program Files\java\jdk −

Configurando o caminho para Linux, UNIX, Solaris, FreeBSD


A variável de ambiente PATH deve ser definida para apontar para onde os binários Java foram instalados. Consulte a documentação do shell se tiver problemas para fazer isso.

Por exemplo, se você usar o bash como seu shell, adicione a seguinte linha no final do seu '.bashrc:export PATH=/path/to/java:$PATH'

Editores Java populares


Para escrever programas Java, você precisa de um editor de texto. Existem IDEs ainda mais sofisticados disponíveis no mercado. Mas, por enquanto, você pode considerar um dos seguintes -

Java 8 - Expressões lambda


As expressões lambda são introduzidas no Java 8 e são consideradas o maior recurso do Java 8. A expressão lambda facilita a programação funcional e simplifica muito o desenvolvimento.

Sintaxe


Uma expressão lambda é caracterizada pela sintaxe a seguir.
parameter -> expression body

A seguir estão as características importantes de uma expressão lambda.

Exemplo de expressões lambda


Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java

Demonstração ao vivo
public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester tester = new Java8Tester();
		
      //with type declaration
      MathOperation addition = (int a, int b) -> a + b;
		
      //with out type declaration
      MathOperation subtraction = (a, b) -> a - b;
		
      //with return statement along with curly braces
      MathOperation multiplication = (int a, int b) -> { return a * b; };
		
      //without return statement and without curly braces
      MathOperation division = (int a, int b) -> a / b;
		
      System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
      System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
      System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
      System.out.println("10 / 5 = " + tester.operate(10, 5, division));
		
      //without parenthesis
      GreetingService greetService1 = message ->
      System.out.println("Hello " + message);
		
      //with parenthesis
      GreetingService greetService2 = (message) ->
      System.out.println("Hello " + message);
		
      greetService1.sayMessage("Mahesh");
      greetService2.sayMessage("Suresh");
   }
	
   interface MathOperation {
      int operation(int a, int b);
   }
	
   interface GreetingService {
      void sayMessage(String message);
   }
	
   private int operate(int a, int b, MathOperation mathOperation) {
      return mathOperation.operation(a, b);
   }
}

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir a seguinte saída -
10 + 5 = 15
10 - 5 = 5
10 x 5 = 50
10 / 5 = 2
Hello Mahesh
Hello Suresh

A seguir estão os pontos importantes a serem considerados no exemplo acima.

Escopo


Usando a expressão lambda, você pode fazer referência a qualquer variável final ou variável efetivamente final (que é atribuída apenas uma vez). A expressão lambda gera um erro de compilação, se uma variável receber um valor pela segunda vez.

Exemplo de escopo


Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java
Demonstração ao vivo
public class Java8Tester {

   final static String salutation = "Hello! ";
   
   public static void main(String args[]) {
      GreetingService greetService1 = message -> 
      System.out.println(salutation + message);
      greetService1.sayMessage("Mahesh");
   }
	
   interface GreetingService {
      void sayMessage(String message);
   }
}

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir a seguinte saída -
Hello! Mahesh

Java 8 - Referências de métodos


As referências de método ajudam a apontar para métodos por seus nomes. Uma referência de método é descrita usando o símbolo "::". Uma referência de método pode ser usada para apontar os seguintes tipos de métodos -

Exemplo de referência de método


Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java

import java.util.List;
import java.util.ArrayList;

public class Java8Tester {

   public static void main(String args[]) {
      List names = new ArrayList();
		
      names.add("Mahesh");
      names.add("Suresh");
      names.add("Ramesh");
      names.add("Naresh");
      names.add("Kalpesh");
		
      names.forEach(System.out::println);
   }
}

Aqui passamos o método System.out::println como uma referência de método estático.

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir a seguinte saída -
Mahesh
Suresh
Ramesh
Naresh
Kalpesh

Java 8 - Interfaces Funcionais


As interfaces funcionais têm uma única funcionalidade para exibir. Por exemplo, uma interface Comparable com um único método ‘compareTo’ é usada para fins de comparação. O Java 8 definiu muitas interfaces funcionais para serem usadas extensivamente em expressões lambda. A seguir está a lista de interfaces funcionais definidas no pacote java.util.Function.

Nº Sr. Interface e descrição
1
BiConsumidor

Representa uma operação que aceita dois argumentos de entrada e não retorna nenhum resultado.
2
BiFunção

Representa uma função que aceita dois argumentos e produz um resultado.
3
Operador Binário

Representa uma operação sobre dois operandos do mesmo tipo, produzindo um resultado do mesmo tipo dos operandos.
4
BiPredicado

Representa um predicado (função com valor booleano) de dois argumentos.
5
BooleanFornecedor

Representa um fornecedor de resultados com valor booleano.
6
Consumidor

Representa uma operação que aceita um único argumento de entrada e não retorna nenhum resultado.
7
DoubleBinaryOperator

Representa uma operação sobre dois operandos de valor duplo e produzindo um resultado de valor duplo.
8
Duplo Consumidor

Representa uma operação que aceita um único argumento de valor duplo e não retorna nenhum resultado.
9
DoubleFunction

Representa uma função que aceita um argumento de valor duplo e produz um resultado.
10
DoublePredicate

Representa um predicado (função de valor booleano) de um argumento de valor duplo.
11
Duplo Fornecedor

Representa um fornecedor de resultados de valor duplo.
12
Função DoubleToInt

Representa uma função que aceita um argumento de valor duplo e produz um resultado de valor int.
13
Função DoubleToLong

Representa uma função que aceita um argumento de valor duplo e produz um resultado de valor longo.
14
DoubleUnaryOperator

Representa uma operação em um único operando de valor duplo que produz um resultado de valor duplo.
15
Função

Representa uma função que aceita um argumento e produz um resultado.
16
IntBinaryOperator

Representa uma operação em dois operandos com valor int e produz um resultado com valor int.
17
IntConsumidor

Representa uma operação que aceita um único argumento com valor int e não retorna nenhum resultado.
18
IntFunction

Representa uma função que aceita um argumento de valor int e produz um resultado.
19
IntPredicate

Representa um predicado (função com valor booleano) de um argumento com valor int.
20
IntFornecedor

Representa um fornecedor de resultados com valor int.
21
FunçãoIntToDouble

Representa uma função que aceita um argumento de valor int e produz um resultado de valor duplo.
22
Função IntToLong

Representa uma função que aceita um argumento de valor int e produz um resultado de valor longo.
23
IntUnaryOperator

Representa uma operação em um único operando com valor int que produz um resultado com valor int.
24
LongBinaryOperator

Representa uma operação em dois operandos de valor longo e produz um resultado de valor longo.
25
LongoConsumidor

Representa uma operação que aceita um único argumento de valor longo e não retorna nenhum resultado.
26
LongFunction

Representa uma função que aceita um argumento de valor longo e produz um resultado.
27
LongPredicate

Representa um predicado (função de valor booleano) de um argumento de valor longo.
28
LongoFornecedor

Representa um fornecedor de resultados de longo valor.
29
LongToDoubleFunction

Representa uma função que aceita um argumento de valor longo e produz um resultado de valor duplo.
30
LongToIntFunction

Representa uma função que aceita um argumento de valor longo e produz um resultado de valor int.
31
LongUnaryOperator

Representa uma operação em um único operando de valor longo que produz um resultado de valor longo.
32
ObjDoubleConsumer

Representa uma operação que aceita um argumento com valor de objeto e um argumento de valor duplo e não retorna nenhum resultado.
33
ObjIntConsumer

Representa uma operação que aceita um argumento com valor de objeto e um argumento com valor int e não retorna nenhum resultado.
34
ObjLongConsumidor

Representa uma operação que aceita um argumento com valor de objeto e um argumento de valor longo e não retorna nenhum resultado.
35
Predicado

Representa um predicado (função com valor booleano) de um argumento.
36
Fornecedor

Representa um fornecedor de resultados.
37
ToDoubleBiFunction

Representa uma função que aceita dois argumentos e produz um resultado de valor duplo.
38
ToDoubleFunction

Representa uma função que produz um resultado de valor duplo.
39
ToIntBiFunction

Representa uma função que aceita dois argumentos e produz um resultado com valor int.
40
ToIntFunction

Representa uma função que produz um resultado com valor int.
41
ToLongBiFunction

Representa uma função que aceita dois argumentos e produz um resultado de valor longo.
42
ToLongFunction

Representa uma função que produz um resultado de valor longo.
43
Operador Unário

Representa uma operação em um único operando que produz um resultado do mesmo tipo que seu operando.

Exemplo de interface funcional


A interface de predicado é uma interface funcional com um método test(Object) para retornar um valor booleano. Essa interface significa que um objeto é testado para ser verdadeiro ou falso.

Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java

Demonstração ao vivo
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

public class Java8Tester {

   public static void main(String args[]) {
      List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
		
      // Predicate<Integer> predicate = n -> true
      // n is passed as parameter to test method of Predicate interface
      // test method will always return true no matter what value n has.
		
      System.out.println("Print all numbers:");
		
      //pass n as parameter
      eval(list, n->true);
		
      // Predicate<Integer> predicate1 = n -> n%2 == 0
      // n is passed as parameter to test method of Predicate interface
      // test method will return true if n%2 comes to be zero
		
      System.out.println("Print even numbers:");
      eval(list, n-> n%2 == 0 );
		
      // Predicate<Integer> predicate2 = n -> n > 3
      // n is passed as parameter to test method of Predicate interface
      // test method will return true if n is greater than 3.
		
      System.out.println("Print numbers greater than 3:");
      eval(list, n-> n > 3 );
   }
	
   public static void eval(List<Integer> list, Predicate<Integer> predicate) {

      for(Integer n: list) {

         if(predicate.test(n)) {
            System.out.println(n + " ");
         }
      }
   }
}

Aqui passamos pela interface Predicate, que recebe uma única entrada e retorna Boolean.

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir a seguinte saída -
Print all numbers:
1
2
3
4
5
6
7
8
9
Print even numbers:
2
4
6
8
Print numbers greater than 3:
4
5
6
7
8
9

Java 8 - Métodos padrão


Java 8 introduz um novo conceito de implementação de método padrão em interfaces. Esse recurso é adicionado para compatibilidade com versões anteriores para que as interfaces antigas possam ser usadas para aproveitar o recurso de expressão lambda do Java 8.

Por exemplo, as interfaces 'List' ou 'Collection' não possuem a declaração do método 'forEach'. Assim, adicionar tal método simplesmente quebrará as implementações da estrutura de coleta. O Java 8 introduz o método padrão para que a interface List/Collection possa ter uma implementação padrão do método forEach, e a classe que implementa essas interfaces não precisa implementar o mesmo.

Sintaxe

public interface vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }
}

Vários padrões


Com funções padrão em interfaces, existe a possibilidade de uma classe estar implementando duas interfaces com os mesmos métodos padrão. O código a seguir explica como essa ambiguidade pode ser resolvida.
public interface vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }
}

public interface fourWheeler {

   default void print() {
      System.out.println("I am a four wheeler!");
   }
}

A primeira solução é criar um método próprio que substitua a implementação padrão.
public class car implements vehicle, fourWheeler {

   public void print() {
      System.out.println("I am a four wheeler car vehicle!");
   }
}

A segunda solução é chamar o método padrão da interface especificada usando super.
public class car implements vehicle, fourWheeler {

   public void print() {
      vehicle.super.print();
   }
}

Métodos padrão estáticos


Uma interface também pode ter métodos auxiliares estáticos do Java 8 em diante.
public interface vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }
	
   static void blowHorn() {
      System.out.println("Blowing horn!!!");
   }
}

Exemplo de método padrão


Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java

Demonstração ao vivo
public class Java8Tester {

   public static void main(String args[]) {
      Vehicle vehicle = new Car();
      vehicle.print();
   }
}

interface Vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }
	
   static void blowHorn() {
      System.out.println("Blowing horn!!!");
   }
}

interface FourWheeler {

   default void print() {
      System.out.println("I am a four wheeler!");
   }
}

class Car implements Vehicle, FourWheeler {

   public void print() {
      Vehicle.super.print();
      FourWheeler.super.print();
      Vehicle.blowHorn();
      System.out.println("I am a car!");
   }
}

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir a seguinte saída -
I am a vehicle!
I am a four wheeler!
Blowing horn!!!
I am a car!

Java 8 - Fluxos


Stream é uma nova camada abstrata introduzida no Java 8. Usando stream, você pode processar dados de maneira declarativa semelhante a instruções SQL. Por exemplo, considere a seguinte instrução SQL.
SELECT max(salary), employee_id, employee_name FROM Employee

A expressão SQL acima retorna automaticamente os detalhes do funcionário assalariado máximo, sem fazer nenhum cálculo por parte do desenvolvedor. Usando o framework de coleções em Java, um desenvolvedor precisa usar loops e fazer verificações repetidas. Outra preocupação é a eficiência; como os processadores multi-core estão disponíveis com facilidade, um desenvolvedor Java precisa escrever um processamento de código paralelo que pode ser bastante propenso a erros.

Para resolver esses problemas, o Java 8 introduziu o conceito de stream que permite ao desenvolvedor processar dados de forma declarativa e alavancar a arquitetura multicore sem a necessidade de escrever nenhum código específico para ela.

O que é transmissão?


Stream representa uma sequência de objetos de uma fonte, que oferece suporte a operações agregadas. A seguir estão as características de um Stream -

  • Sequência de elementos − Um fluxo fornece um conjunto de elementos de tipo específico de forma sequencial. Um fluxo obtém/computa elementos sob demanda. Ele nunca armazena os elementos.

  • Fonte − Stream usa recursos de coleções, matrizes ou E/S como fonte de entrada.

  • Operações agregadas − O Stream suporta operações agregadas como filtrar, mapear, limitar, reduzir, localizar, corresponder e assim por diante.

  • Encanamento − A maioria das operações de stream retorna o próprio stream para que seu resultado possa ser canalizado. Essas operações são chamadas de operações intermediárias e sua função é receber a entrada, processá-la e retornar a saída ao destino. O método collect() é uma operação de terminal que normalmente está presente no final da operação de pipeline para marcar o final do fluxo.

  • Iterações automáticas − As operações de fluxo fazem as iterações internamente sobre os elementos de origem fornecidos, em contraste com as Coleções onde a iteração explícita é necessária.

Gerando fluxos


Com Java 8, a interface Collection possui dois métodos para gerar um Stream.

  • fluxo() − Retorna um fluxo sequencial considerando a coleção como sua fonte.

  • parallelStream() − Retorna um Stream paralelo considerando a coleção como sua fonte.
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

forEach


Stream forneceu um novo método 'forEach' para iterar cada elemento do fluxo. O segmento de código a seguir mostra como imprimir 10 números aleatórios usando forEach.
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

mapa


O método ‘map’ é usado para mapear cada elemento ao seu resultado correspondente. O segmento de código a seguir imprime quadrados exclusivos de números usando map.
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);

//get list of unique squares
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

filtro


O método de 'filtro' é usado para eliminar elementos com base em um critério. O segmento de código a seguir imprime uma contagem de strings vazias usando filter.
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");

//get count of empty string
int count = strings.stream().filter(string -> string.isEmpty()).count();

limite


O método 'limit' é usado para reduzir o tamanho do fluxo. O segmento de código a seguir mostra como imprimir 10 números aleatórios usando limite.
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

classificado


O método 'classificado' é usado para classificar o fluxo. O segmento de código a seguir mostra como imprimir 10 números aleatórios em uma ordem de classificação.
Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);

Processamento paralelo


parallelStream é a alternativa de stream para processamento paralelo. Dê uma olhada no seguinte segmento de código que imprime uma contagem de strings vazias usando parallelStream.
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");

//get count of empty string
long count = strings.parallelStream().filter(string -> string.isEmpty()).count();

É muito fácil alternar entre fluxos sequenciais e paralelos.

Colecionadores


Os coletores são usados ​​para combinar o resultado do processamento nos elementos de um fluxo. Os coletores podem ser usados ​​para retornar uma lista ou uma string.
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

System.out.println("Filtered List: " + filtered);
String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
System.out.println("Merged String: " + mergedString);

Estatísticas


Com o Java 8, os coletores de estatísticas são introduzidos para calcular todas as estatísticas quando o processamento de fluxo está sendo feito.
List numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);

IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();

System.out.println("Highest number in List : " + stats.getMax());
System.out.println("Lowest number in List : " + stats.getMin());
System.out.println("Sum of all numbers : " + stats.getSum());
System.out.println("Average of all numbers : " + stats.getAverage());

Exemplo de fluxo


Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java

Demonstração ao vivo
import java.util.ArrayList;
import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.Map;

public class Java8Tester {

   public static void main(String args[]) {
      System.out.println("Using Java 7: ");
		
      // Count empty strings
      List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
      System.out.println("List: " +strings);
      long count = getCountEmptyStringUsingJava7(strings);
		
      System.out.println("Empty Strings: " + count);
      count = getCountLength3UsingJava7(strings);
		
      System.out.println("Strings of length 3: " + count);
		
      //Eliminate empty string
      List<String> filtered = deleteEmptyStringsUsingJava7(strings);
      System.out.println("Filtered List: " + filtered);
		
      //Eliminate empty string and join using comma.
      String mergedString = getMergedStringUsingJava7(strings,", ");
      System.out.println("Merged String: " + mergedString);
      List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
		
      //get list of square of distinct numbers
      List<Integer> squaresList = getSquares(numbers);
      System.out.println("Squares List: " + squaresList);
      List<Integer> integers = Arrays.asList(1,2,13,4,15,6,17,8,19);
		
      System.out.println("List: " +integers);
      System.out.println("Highest number in List : " + getMax(integers));
      System.out.println("Lowest number in List : " + getMin(integers));
      System.out.println("Sum of all numbers : " + getSum(integers));
      System.out.println("Average of all numbers : " + getAverage(integers));
      System.out.println("Random Numbers: ");
		
      //print ten random numbers
      Random random = new Random();
		
      for(int i = 0; i < 10; i++) {
         System.out.println(random.nextInt());
      }
		
      System.out.println("Using Java 8: ");
      System.out.println("List: " +strings);
		
      count = strings.stream().filter(string->string.isEmpty()).count();
      System.out.println("Empty Strings: " + count);
		
      count = strings.stream().filter(string -> string.length() == 3).count();
      System.out.println("Strings of length 3: " + count);
		
      filtered = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.toList());
      System.out.println("Filtered List: " + filtered);
		
      mergedString = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.joining(", "));
      System.out.println("Merged String: " + mergedString);
		
      squaresList = numbers.stream().map( i ->i*i).distinct().collect(Collectors.toList());
      System.out.println("Squares List: " + squaresList);
      System.out.println("List: " +integers);
		
      IntSummaryStatistics stats = integers.stream().mapToInt((x) ->x).summaryStatistics();
		
      System.out.println("Highest number in List : " + stats.getMax());
      System.out.println("Lowest number in List : " + stats.getMin());
      System.out.println("Sum of all numbers : " + stats.getSum());
      System.out.println("Average of all numbers : " + stats.getAverage());
      System.out.println("Random Numbers: ");
		
      random.ints().limit(10).sorted().forEach(System.out::println);
		
      //parallel processing
      count = strings.parallelStream().filter(string -> string.isEmpty()).count();
      System.out.println("Empty Strings: " + count);
   }
	
   private static int getCountEmptyStringUsingJava7(List<String> strings) {
      int count = 0;

      for(String string: strings) {
		
         if(string.isEmpty()) {
            count++;
         }
      }
      return count;
   }
	
   private static int getCountLength3UsingJava7(List<String> strings) {
      int count = 0;
		
      for(String string: strings) {
		
         if(string.length() == 3) {
            count++;
         }
      }
      return count;
   }
	
   private static List<String> deleteEmptyStringsUsingJava7(List<String> strings) {
      List<String> filteredList = new ArrayList<String>();
		
      for(String string: strings) {
		
         if(!string.isEmpty()) {
             filteredList.add(string);
         }
      }
      return filteredList;
   }
	
   private static String getMergedStringUsingJava7(List<String> strings, String separator) {
      StringBuilder stringBuilder = new StringBuilder();
		
      for(String string: strings) {
		
         if(!string.isEmpty()) {
            stringBuilder.append(string);
            stringBuilder.append(separator);
         }
      }
      String mergedString = stringBuilder.toString();
      return mergedString.substring(0, mergedString.length()-2);
   }
	
   private static List<Integer> getSquares(List<Integer> numbers) {
      List<Integer> squaresList = new ArrayList<Integer>();
		
      for(Integer number: numbers) {
         Integer square = new Integer(number.intValue() * number.intValue());
			
         if(!squaresList.contains(square)) {
            squaresList.add(square);
         }
      }
      return squaresList;
   }
	
   private static int getMax(List<Integer> numbers) {
      int max = numbers.get(0);
		
      for(int i = 1;i < numbers.size();i++) {
		
         Integer number = numbers.get(i);
			
         if(number.intValue() > max) {
            max = number.intValue();
         }
      }
      return max;
   }
	
   private static int getMin(List<Integer> numbers) {
      int min = numbers.get(0);
		
      for(int i= 1;i < numbers.size();i++) {
         Integer number = numbers.get(i);
		
         if(number.intValue() < min) {
            min = number.intValue();
         }
      }
      return min;
   }
	
   private static int getSum(List numbers) {
      int sum = (int)(numbers.get(0));
		
      for(int i = 1;i < numbers.size();i++) {
         sum += (int)numbers.get(i);
      }
      return sum;
   }
	
   private static int getAverage(List<Integer> numbers) {
      return getSum(numbers) / numbers.size();
   }
}

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir o seguinte resultado -
Using Java 7:
List: [abc, , bc, efg, abcd, , jkl]
Empty Strings: 2
Strings of length 3: 3
Filtered List: [abc, bc, efg, abcd, jkl]
Merged String: abc, bc, efg, abcd, jkl
Squares List: [9, 4, 49, 25]
List: [1, 2, 13, 4, 15, 6, 17, 8, 19]
Highest number in List : 19
Lowest number in List : 1
Sum of all numbers : 85
Average of all numbers : 9
Random Numbers:
-1279735475
903418352
-1133928044
-1571118911
628530462
18407523
-881538250
-718932165
270259229
421676854
Using Java 8:
List: [abc, , bc, efg, abcd, , jkl]
Empty Strings: 2
Strings of length 3: 3
Filtered List: [abc, bc, efg, abcd, jkl]
Merged String: abc, bc, efg, abcd, jkl
Squares List: [9, 4, 49, 25]
List: [1, 2, 13, 4, 15, 6, 17, 8, 19]
Highest number in List : 19
Lowest number in List : 1
Sum of all numbers : 85
Average of all numbers : 9.444444444444445
Random Numbers:
-1009474951
-551240647
-2484714
181614550
933444268
1227850416
1579250773
1627454872
1683033687
1798939493
Empty Strings: 2

Java 8 - Classe opcional


Opcional é um objeto container usado para conter objetos não nulos. O objeto opcional é usado para representar null com valor ausente. Esta classe tem vários métodos utilitários para facilitar o código para lidar com valores como 'disponível' ou 'não disponível' em vez de verificar valores nulos. Ele é introduzido no Java 8 e é semelhante ao que é opcional no Guava.

Declaração de Classe


Segue a declaração para java.util.Optional classe -
public final class Optional<T> extends Object

Método de classe

Nº Sr. Método e descrição
1
estático Opcional vazio()

Retorna uma instância Opcional vazia.
2
boolean equals(Object obj)

Indica se algum outro objeto é "igual a" este Opcional.
3
Filtro opcional(Predicado predicado)

Se um valor estiver presente e o valor corresponder a um determinado predicado, ele retornará um Optional descrevendo o valor, caso contrário, retornará um Optional vazio.
4
Opcional flatMap(Função> mapeador)

Se um valor estiver presente, ele aplicará a função de mapeamento de rolamento Opcional fornecida a ele, retornará esse resultado, caso contrário, retornará um Opcional vazio.
5
T get()

Se um valor estiver presente neste Optional, retornará o valor, caso contrário, lançará NoSuchElementException.
6
int hashCode()

Retorna o valor do código hash do valor presente, se houver, ou 0 (zero) se nenhum valor estiver presente.
7
void ifPresent(Consumidor consumidor)

Se um valor estiver presente, ele invocará o consumidor especificado com o valor, caso contrário não fará nada.
8
booleano isPresent()

Retorna true se houver um valor presente, caso contrário, false.
9
Mapa opcional(Função mapeador)

Se um valor estiver presente, aplica a função de mapeamento fornecida a ele e, se o resultado não for nulo, retorna um Opcional descrevendo o resultado.
10
estático Opcional de(valor T)

Retorna um Opcional com o valor não nulo presente especificado.
11
estático Opcional de Nullable(T value)

Retorna um Optional descrevendo o valor especificado, se não for nulo, caso contrário, retorna um Optional vazio.
12
T ouSenão(T outro)

Retorna o valor se presente, caso contrário retorna outro.
13
T orElseGet(Fornecedor outro)

Retorna o valor se presente, caso contrário invoca outro e retorna o resultado dessa invocação.
14
T orElseThrow(Fornecedor exceçãoSupplier)


Retorna o valor contido, se presente, caso contrário lança uma exceção a ser criada pelo fornecedor fornecido.
15
String toString()

Retorna uma representação de string não vazia deste Opcional adequado para depuração.

Esta classe herda métodos da seguinte classe -
  • java.lang.Object

Exemplo opcional


Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java

Demonstração ao vivo
import java.util.Optional;

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester java8Tester = new Java8Tester();
      Integer value1 = null;
      Integer value2 = new Integer(10);
		
      //Optional.ofNullable - allows passed parameter to be null.
      Optional<Integer> a = Optional.ofNullable(value1);
		
      //Optional.of - throws NullPointerException if passed parameter is null
      Optional<Integer> b = Optional.of(value2);
      System.out.println(java8Tester.sum(a,b));
   }
	
   public Integer sum(Optional<Integer> a, Optional<Integer> b) {
      //Optional.isPresent - checks the value is present or not
		
      System.out.println("First parameter is present: " + a.isPresent());
      System.out.println("Second parameter is present: " + b.isPresent());
		
      //Optional.orElse - returns the value if present otherwise returns
      //the default value passed.
      Integer value1 = a.orElse(new Integer(0));
		
      //Optional.get - gets the value, value should be present
      Integer value2 = b.get();
      return value1 + value2;
   }
}

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir a seguinte saída -
First parameter is present: false
Second parameter is present: true
10

Java 8 - JavaScript Nashorn


Com o Java 8, Nashorn, um mecanismo javascript muito aprimorado é introduzido, para substituir o Rhino existente. O Nashorn oferece desempenho de 2 a 10 vezes melhor, pois compila diretamente o código na memória e passa o bytecode para a JVM. O Nashorn usa o recurso de dinâmica de invocação, introduzido no Java 7 para melhorar o desempenho.

jjs


Para o mecanismo Nashorn, o JAVA 8 apresenta uma nova ferramenta de linha de comando, jjs, para executar códigos javascript no console.

Interpretando arquivo js


Crie e salve o arquivo sample.js na pasta c:\> JAVA.

amostra.js

print('Hello World!');

Abra o console e use o comando a seguir.
C:\JAVA>jjs sample.js

Ele produzirá a seguinte saída:
Hello World!

jjs no modo interativo


Abra o console e use o comando a seguir.
C:\JAVA>jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>

Aprovar argumentos


Abra o console e use o comando a seguir.
C:\JAVA> jjs -- a b c
jjs> print('letters: ' +arguments.join(", "))
letters: a, b, c
jjs>

Chamando JavaScript de Java


Usando ScriptEngineManager, o código JavaScript pode ser chamado e interpretado em Java.

Exemplo


Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java

Demonstração ao vivo
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;

public class Java8Tester {

   public static void main(String args[]) {
      ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
      ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
		
      String name = "Mahesh";
      Integer result = null;
      
      try {
         nashorn.eval("print('" + name + "')");
         result = (Integer) nashorn.eval("10 + 2");
         
      } catch(ScriptException e) {
         System.out.println("Error executing script: "+ e.getMessage());
      }
      System.out.println(result.toString());
   }
}

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir o seguinte resultado -
Mahesh
12

Chamando Java de JavaScript


O exemplo a seguir explica como importar e usar classes Java em java script.

Crie e salve sample.js na pasta c:\> JAVA.

amostra.js

var BigDecimal = Java.type('java.math.BigDecimal');

function calculate(amount, percentage) {

   var result = new BigDecimal(amount).multiply(new BigDecimal(percentage)).divide(
      new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
   
   return result.toPlainString();
}
var result = calculate(568000000000000000023,13.9);
print(result);

Abra o console e use o comando a seguir.
C:\JAVA>jjs sample.js

Deve produzir a seguinte saída -
78952000000000000003.20

Java 8 - Nova API de data/hora


Com o Java 8, uma nova API de data e hora é introduzida para cobrir as seguintes desvantagens da antiga API de data e hora.

  • Não é seguro para threads − java.util.Date não é seguro para threads, portanto, os desenvolvedores precisam lidar com problemas de simultaneidade ao usar data. A nova API de data e hora é imutável e não possui métodos setter.

  • Design ruim − A data padrão começa em 1900, o mês começa em 1 e o dia começa em 0, portanto, não há uniformidade. A API antiga tinha métodos menos diretos para operações de data. A nova API fornece vários métodos utilitários para tais operações.

  • Manuseio de fuso horário difícil − Os desenvolvedores tiveram que escrever muito código para lidar com problemas de fuso horário. A nova API foi desenvolvida tendo em mente o design específico do domínio.

O Java 8 apresenta uma nova API de data e hora no pacote java.time. A seguir estão algumas das classes importantes introduzidas no pacote java.time.

  • Local − API de data e hora simplificada sem complexidade de manipulação de fuso horário.

  • Zoneado − API de data e hora especializada para lidar com vários fusos horários.

API local de data e hora


As classes LocalDate/LocalTime e LocalDateTime simplificam o desenvolvimento onde os fusos horários não são necessários. Vamos vê-los em ação.

Crie o seguinte programa java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java

Demonstração ao vivo
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Month;

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester java8tester = new Java8Tester();
      java8tester.testLocalDateTime();
   }
	
   public void testLocalDateTime() {
      // Get the current date and time
      LocalDateTime currentTime = LocalDateTime.now();
      System.out.println("Current DateTime: " + currentTime);
		
      LocalDate date1 = currentTime.toLocalDate();
      System.out.println("date1: " + date1);
		
      Month month = currentTime.getMonth();
      int day = currentTime.getDayOfMonth();
      int seconds = currentTime.getSecond();
		
      System.out.println("Month: " + month +"day: " + day +"seconds: " + seconds);
		
      LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012);
      System.out.println("date2: " + date2);
		
      //12 december 2014
      LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12);
      System.out.println("date3: " + date3);
		
      //22 hour 15 minutes
      LocalTime date4 = LocalTime.of(22, 15);
      System.out.println("date4: " + date4);
		
      //parse a string
      LocalTime date5 = LocalTime.parse("20:15:30");
      System.out.println("date5: " + date5);
   }
}

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir a seguinte saída -
Current DateTime: 2014-12-09T11:00:45.457
date1: 2014-12-09
Month: DECEMBERday: 9seconds: 45
date2: 2012-12-10T11:00:45.457
date3: 2014-12-12
date4: 22:15
date5: 20:15:30

API Data-Hora Zoneada


A API de data e hora zoneada deve ser usada quando o fuso horário deve ser considerado. Vamos vê-los em ação.

Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java

Demonstração ao vivo
import java.time.ZonedDateTime;
import java.time.ZoneId;

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester java8tester = new Java8Tester();
      java8tester.testZonedDateTime();
   }
	
   public void testZonedDateTime() {
      // Get the current date and time
      ZonedDateTime date1 = ZonedDateTime.parse("2007-12-03T10:15:30+05:30[Asia/Karachi]");
      System.out.println("date1: " + date1);
		
      ZoneId id = ZoneId.of("Europe/Paris");
      System.out.println("ZoneId: " + id);
		
      ZoneId currentZone = ZoneId.systemDefault();
      System.out.println("CurrentZone: " + currentZone);
   }
}

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir a seguinte saída -
date1: 2007-12-03T10:15:30+05:00[Asia/Karachi]
ZoneId: Europe/Paris
CurrentZone: Etc/UTC

Crono Units Enum


java.time.temporal.ChronoUnit enum é adicionado no Java 8 para substituir os valores inteiros usados ​​na API antiga para representar dia, mês, etc. Vamos vê-los em ação.

Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java

Demonstração ao vivo
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester java8tester = new Java8Tester();
      java8tester.testChromoUnits();
   }
	
   public void testChromoUnits() {
      //Get the current date
      LocalDate today = LocalDate.now();
      System.out.println("Current date: " + today);
		
      //add 1 week to the current date
      LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
      System.out.println("Next week: " + nextWeek);
		
      //add 1 month to the current date
      LocalDate nextMonth = today.plus(1, ChronoUnit.MONTHS);
      System.out.println("Next month: " + nextMonth);
		
      //add 1 year to the current date
      LocalDate nextYear = today.plus(1, ChronoUnit.YEARS);
      System.out.println("Next year: " + nextYear);
		
      //add 10 years to the current date
      LocalDate nextDecade = today.plus(1, ChronoUnit.DECADES);
      System.out.println("Date after ten year: " + nextDecade);
   }
}

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir o seguinte resultado -
Current date: 2014-12-10
Next week: 2014-12-17
Next month: 2015-01-10
Next year: 2015-12-10
Date after ten year: 2024-12-10

Período e Duração


Com o Java 8, duas classes especializadas são introduzidas para lidar com as diferenças de tempo.

  • Período − Ele lida com quantidade de tempo baseada em data.

  • Duração − Ele lida com a quantidade de tempo baseada no tempo.

Vamos vê-los em ação.

Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java

Demonstração ao vivo
import java.time.temporal.ChronoUnit;

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Duration;
import java.time.Period;

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester java8tester = new Java8Tester();
      java8tester.testPeriod();
      java8tester.testDuration();
   }
	
   public void testPeriod() {
      //Get the current date
      LocalDate date1 = LocalDate.now();
      System.out.println("Current date: " + date1);
		
      //add 1 month to the current date
      LocalDate date2 = date1.plus(1, ChronoUnit.MONTHS);
      System.out.println("Next month: " + date2);
      
      Period period = Period.between(date2, date1);
      System.out.println("Period: " + period);
   }
	
   public void testDuration() {
      LocalTime time1 = LocalTime.now();
      Duration twoHours = Duration.ofHours(2);
		
      LocalTime time2 = time1.plus(twoHours);
      Duration duration = Duration.between(time1, time2);
		
      System.out.println("Duration: " + duration);
   }
}

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir a seguinte saída -
Current date: 2014-12-10
Next month: 2015-01-10
Period: P-1M
Duration: PT2H

Ajustadores Temporais


O TemporalAdjuster é usado para realizar a matemática de datas. Por exemplo, obtenha o "Segundo sábado do mês" ou "Próxima terça-feira". Vamos vê-los em ação.

Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java

Demonstração ao vivo
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.time.DayOfWeek;

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester java8tester = new Java8Tester();
      java8tester.testAdjusters();
   }
	
   public void testAdjusters() {
      //Get the current date
      LocalDate date1 = LocalDate.now();
      System.out.println("Current date: " + date1);
		
      //get the next tuesday
      LocalDate nextTuesday = date1.with(TemporalAdjusters.next(DayOfWeek.TUESDAY));
      System.out.println("Next Tuesday on : " + nextTuesday);
		
      //get the second saturday of next month
      LocalDate firstInYear = LocalDate.of(date1.getYear(),date1.getMonth(), 1);
      LocalDate secondSaturday = firstInYear.with(TemporalAdjusters.nextOrSame(
         DayOfWeek.SATURDAY)).with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
      System.out.println("Second Saturday on : " + secondSaturday);
   }
}

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir o seguinte resultado -
Current date: 2014-12-10
Next Tuesday on : 2014-12-16
Second Saturday on : 2014-12-13

Compatibilidade com versões anteriores


Um método toInstant() é adicionado aos objetos originais Date e Calendar, que podem ser usados ​​para convertê-los para a nova API Date-Time. Use um método ofInstant(Insant,ZoneId) para obter um objeto LocalDateTime ou ZonedDateTime. Vamos vê-los em ação.

Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.

Java8Tester.java

Demonstração ao vivo
import java.time.LocalDateTime;
import java.time.ZonedDateTime;

import java.util.Date;

import java.time.Instant;
import java.time.ZoneId;

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester java8tester = new Java8Tester();
      java8tester.testBackwardCompatability();
   }
	
   public void testBackwardCompatability() {
      //Get the current date
      Date currentDate = new Date();
      System.out.println("Current date: " + currentDate);
		
      //Get the instant of current date in terms of milliseconds
      Instant now = currentDate.toInstant();
      ZoneId currentZone = ZoneId.systemDefault();
		
      LocalDateTime localDateTime = LocalDateTime.ofInstant(now, currentZone);
      System.out.println("Local date: " + localDateTime);
		
      ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(now, currentZone);
      System.out.println("Zoned date: " + zonedDateTime);
   }
}

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir a seguinte saída -
Current date: Wed Dec 10 05:44:06 UTC 2014
Local date: 2014-12-10T05:44:06.635
Zoned date: 2014-12-10T05:44:06.635Z[Etc/UTC]

Java 8 - Base64


Com o Java 8, o Base64 finalmente conseguiu o que merecia. O Java 8 agora possui codificador e decodificador embutidos para codificação Base64. No Java 8, podemos usar três tipos de codificação Base64.

  • Simples − A saída é mapeada para um conjunto de caracteres em A-Za-z0-9+/. O codificador não adiciona nenhuma alimentação de linha na saída e o decodificador rejeita qualquer caractere diferente de A-Za-z0-9+/.

  • URL − A saída é mapeada para um conjunto de caracteres em A-Za-z0-9+_. A saída é segura para URL e nome de arquivo.

  • MIME − A saída é mapeada para o formato amigável MIME. A saída é representada em linhas de no máximo 76 caracteres cada e usa um retorno de carro '\r' seguido por um avanço de linha '\n' como separador de linha. Nenhum separador de linha está presente no final da saída codificada.

Classes aninhadas

Nº Sr. Classe e descrição aninhadas
1
classe estática Base64.Decoder

Essa classe implementa um decodificador para decodificar dados de bytes usando o esquema de codificação Base64 conforme especificado em RFC 4648 e RFC 2045.
2
classe estática Base64.Encoder

Essa classe implementa um codificador para codificar dados de bytes usando o esquema de codificação Base64 conforme especificado em RFC 4648 e RFC 2045.

Métodos

Nº Sr. Nome e descrição do método
1
estático Base64.Decoder getDecoder()

Retorna um Base64.Decoder que decodifica usando o esquema de codificação base64 do tipo básico.
2
estático Base64.Encoder getEncoder()

Retorna um Base64.Encoder que codifica usando o esquema de codificação base64 do tipo básico.
3
estático Base64.Decoder getMimeDecoder()

Retorna um Base64.Decoder que decodifica usando o esquema de decodificação base64 do tipo MIME.
4
estático Base64.Encoder getMimeEncoder()

Retorna um Base64.Encoder que codifica usando o esquema de codificação base64 do tipo MIME.
5
static Base64.Encoder getMimeEncoder(int lineLength, byte[] lineSeparator)

Retorna um Base64.Encoder que codifica usando o esquema de codificação base64 do tipo MIME com comprimento de linha e separadores de linha especificados.
6
estático Base64.Decoder getUrlDecoder()

Retorna um Base64.Decoder que decodifica usando o esquema de codificação base64 do tipo seguro URL e Nome de arquivo.
7
estático Base64.Encoder getUrlEncoder()

Retorna um Base64.Encoder que codifica usando o esquema de codificação base64 do tipo seguro URL e Nome de arquivo.

Métodos herdados


Esta classe herda métodos da seguinte classe -
  • java.lang.Object

Exemplo de Base64


Crie o seguinte programa Java usando qualquer editor de sua escolha em C:/> JAVA.

Java8Tester.java

Demonstração ao vivo
import java.util.Base64;
import java.util.UUID;
import java.io.UnsupportedEncodingException;

public class HelloWorld {

   public static void main(String args[]) {

      try {
		
         // Encode using basic encoder
         String base64encodedString = Base64.getEncoder().encodeToString(
            "TutorialsPoint?java8".getBytes("utf-8"));
         System.out.println("Base64 Encoded String (Basic) :" + base64encodedString);
		
         // Decode
         byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString);
		
         System.out.println("Original String: " + new String(base64decodedBytes, "utf-8"));
         base64encodedString = Base64.getUrlEncoder().encodeToString(
            "TutorialsPoint?java8".getBytes("utf-8"));
         System.out.println("Base64 Encoded String (URL) :" + base64encodedString);
		
         StringBuilder stringBuilder = new StringBuilder();
		
         for (int i = 0; i < 10; ++i) {
            stringBuilder.append(UUID.randomUUID().toString());
         }
		
         byte[] mimeBytes = stringBuilder.toString().getBytes("utf-8");
         String mimeEncodedString = Base64.getMimeEncoder().encodeToString(mimeBytes);
         System.out.println("Base64 Encoded String (MIME) :" + mimeEncodedString);

      } catch(UnsupportedEncodingException e) {
         System.out.println("Error :" + e.getMessage());
      }
   }
}

Verifique o resultado


Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java

Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester

Deve produzir a seguinte saída -
Base64 Encoded String (Basic) :VHV0b3JpYWxzUG9pbnQ/amF2YTg=
Original String: TutorialsPoint?java8
Base64 Encoded String (URL) :VHV0b3JpYWxzUG9pbnQ_amF2YTg=
Base64 Encoded String (MIME) :YmU3NWY2ODktNGM5YS00ODlmLWI2MTUtZTVkOTk2YzQ1Njk1Y2EwZTg2OTEtMmRiZC00YTQ1LWJl
NTctMTI1MWUwMTk0ZWQyNDE0NDAwYjgtYTYxOS00NDY5LTllYTctNjc1YzE3YWJhZTk1MTQ2MDQz
NDItOTAyOC00ZWI0LThlOTYtZWU5YzcwNWQyYzVhMTQxMWRjYTMtY2MwNi00MzU0LTg0MTgtNGQ1
MDkwYjdiMzg2ZTY0OWU5MmUtZmNkYS00YWEwLTg0MjQtYThiOTQxNDQ2YzhhNTVhYWExZjItNjU2
Mi00YmM4LTk2ZGYtMDE4YmY5ZDZhMjkwMzM3MWUzNDMtMmQ3MS00MDczLWI0Y2UtMTQxODE0MGU5
YjdmYTVlODUxYzItN2NmOS00N2UyLWIyODQtMThlMWVkYTY4M2Q1YjE3YTMyYmItZjllMS00MTFk
LWJiM2UtM2JhYzUxYzI5OWI4

Java

  1. Vetor Java
  2. Fresamento - Um Guia Rápido
  3. Guia rápido para desenvolvimento e execução de PM
  4. Um guia rápido de seguro para interrupção da cadeia de suprimentos
  5. Um guia rápido para máquina de dobra de tubo quadrado
  6. Um guia rápido para máquina de prensagem a frio
  7. Um guia rápido para a caixa de engrenagens planetária
  8. Um guia rápido para furadeira a jato
  9. Um guia rápido para a máquina de prensa servo
  10. Um guia rápido para cilindros pneumáticos