Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Java 8 - Guía rápida

Java 8:descripción general

JAVA 8 es una versión importante del desarrollo del lenguaje de programación JAVA. Su versión inicial se lanzó el 18 de marzo de 2014. Con el lanzamiento de Java 8, Java proporcionó soporte para programación funcional, nuevo motor de JavaScript, nuevas API para manipulación de fecha y hora, nueva API de transmisión, etc.

Nuevas funciones

Considere el siguiente fragmento de código.

Demostración en 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));
   }
}

Ejecute el programa para obtener el siguiente resultado.

Sort using Java 7 syntax:
[ Kalpesh Mahesh Naresh Ramesh Suresh ]
Sort using Java 8 syntax:
[ Kalpesh Mahesh Naresh Ramesh Suresh ]

Aquí el sortUsingJava8() El método utiliza la función de clasificación con una expresión lambda como parámetro para obtener los criterios de clasificación.

Java 8 - Configuración del entorno

Configuración del entorno local

Si desea configurar su propio entorno para el lenguaje de programación Java, esta sección lo guiará a través de todo el proceso. Siga los pasos que se indican a continuación para configurar su entorno Java.

Java SE se puede descargar de forma gratuita desde el siguiente enlace −

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

Descargas una versión basada en tu sistema operativo.

Siga las instrucciones para descargar Java y ejecute el .exe para instalar Java en su máquina. Una vez que haya instalado Java en su máquina, deberá configurar las variables de entorno para que apunten a los directorios de instalación correctos.

Configuración de la ruta para Windows 2000/XP

Suponiendo que haya instalado Java en el directorio c:\Program Files\java\jdk −

Configuración de la ruta para Windows 95/98/ME

Suponiendo que haya instalado Java en el directorio c:\Program Files\java\jdk −

Configuración de la ruta para Linux, UNIX, Solaris, FreeBSD

La variable de entorno PATH debe configurarse para señalar dónde se han instalado los archivos binarios de Java. Consulte la documentación de su shell si tiene problemas para hacerlo.

Por ejemplo, si usa bash como shell, entonces agregaría la siguiente línea al final de su '.bashrc:export PATH=/path/to/java:$PATH'

Editores populares de Java

Para escribir programas Java, necesita un editor de texto. Hay IDE aún más sofisticados disponibles en el mercado. Pero por ahora, puedes considerar uno de los siguientes −

Java 8 - Expresiones lambda

Las expresiones lambda se introducen en Java 8 y se promocionan como la característica más importante de Java 8. La expresión lambda facilita la programación funcional y simplifica mucho el desarrollo.

Sintaxis

Una expresión lambda se caracteriza por la siguiente sintaxis.

parameter -> expression body

Las siguientes son las características importantes de una expresión lambda.

Ejemplo de expresiones lambda

Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.

Java8Tester.java

Demostración en 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);
   }
}

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente resultado −

10 + 5 = 15
10 - 5 = 5
10 x 5 = 50
10 / 5 = 2
Hello Mahesh
Hello Suresh

Los siguientes son los puntos importantes a considerar en el ejemplo anterior.

Alcance

Usando la expresión lambda, puede referirse a cualquier variable final o variable final efectiva (que se asigna solo una vez). La expresión lambda genera un error de compilación si se asigna un valor a una variable por segunda vez.

Ejemplo de alcance

Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.

Java8Tester.java

Demostración en 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);
   }
}

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente resultado −

Hello! Mahesh

Java 8 - Referencias de métodos

Las referencias a métodos ayudan a señalar los métodos por sus nombres. La referencia de un método se describe mediante el símbolo "::". Se puede usar una referencia de método para señalar los siguientes tipos de métodos −

Ejemplo de referencia del método

Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, 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);
   }
}

Aquí hemos pasado el método System.out::println como una referencia de método estático.

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente resultado −

Mahesh
Suresh
Ramesh
Naresh
Kalpesh

Java 8 - Interfaces funcionales

Las interfaces funcionales tienen una sola funcionalidad para exhibir. Por ejemplo, se utiliza una interfaz Comparable con un solo método 'compareTo' para fines de comparación. Java 8 ha definido una gran cantidad de interfaces funcionales para su uso extensivo en expresiones lambda. A continuación se muestra la lista de interfaces funcionales definidas en el paquete java.util.Function.


Sr.No. Interfaz y descripción
1

BiConsumidor

Representa una operación que acepta dos argumentos de entrada y no devuelve ningún resultado.

2

Bifunción

Representa una función que acepta dos argumentos y produce un resultado.

3

Operador binario

Representa una operación sobre dos operandos del mismo tipo, produciendo un resultado del mismo tipo que los operandos.

4

Bipredicado

Representa un predicado (función de valor booleano) de dos argumentos.

5

Suministrador booleano

Representa un proveedor de resultados con valores booleanos.

6

Consumidor

Representa una operación que acepta un único argumento de entrada y no devuelve ningún resultado.

7

Operador binario doble

Representa una operación sobre dos operandos de doble valor y produce un resultado de doble valor.

8

Consumidor doble

Representa una operación que acepta un único argumento de doble valor y no devuelve ningún resultado.

9

Doble Función

Representa una función que acepta un argumento de valor doble y produce un resultado.

10

Doble Predicado

Representa un predicado (función de valor booleano) de un argumento de valor doble.

11

Doble proveedor

Representa un proveedor de resultados de doble valor.

12

FunciónDoubleToInt

Representa una función que acepta un argumento de valor doble y produce un resultado de valor entero.

13

FunciónDobleALargo

Representa una función que acepta un argumento de valor doble y produce un resultado de valor largo.

14

Operador UnarioDoble

Representa una operación en un solo operando de doble valor que produce un resultado de doble valor.

15

Función

Representa una función que acepta un argumento y produce un resultado.

16

OperadorBinarioInt

Representa una operación sobre dos operandos de valor int y produce un resultado de valor int.

17

ConsumidorInterno

Representa una operación que acepta un único argumento de valor entero y no devuelve ningún resultado.

18

FunciónInt

Representa una función que acepta un argumento de valor entero y produce un resultado.

19

PredicadoInt

Representa un predicado (función de valor booleano) de un argumento de valor entero.

20

ProveedorInterno

Representa a un proveedor de resultados de valor internacional.

21

IntToDoubleFunction

Representa una función que acepta un argumento de valor entero y produce un resultado de valor doble.

22

FunciónIntToLong

Representa una función que acepta un argumento de valor entero y produce un resultado de valor largo.

23

OperadorIntUnario

Representa una operación en un solo operando de valor int que produce un resultado de valor int.

24

Operador binario largo

Representa una operación sobre dos operandos de valor largo y produce un resultado de valor largo.

25

Consumidor largo

Representa una operación que acepta un único argumento de valor largo y no devuelve ningún resultado.

26

Función Larga

Representa una función que acepta un argumento de valor largo y produce un resultado.

27

Predicado largo

Representa un predicado (función de valor booleano) de un argumento de valor largo.

28

Proveedor largo

Representa un proveedor de resultados valiosos a largo plazo.

29

Función Larga ADoble

Representa una función que acepta un argumento de valor largo y produce un resultado de valor doble.

30

FunciónLongToInt

Representa una función que acepta un argumento de valor largo y produce un resultado de valor entero.

31

Operador Unario Largo

Representa una operación en un solo operando de valor largo que produce un resultado de valor largo.

32

ObjConsumidorDoble

Representa una operación que acepta un argumento de valor de objeto y de valor doble, y no devuelve ningún resultado.

33

ObjIntConsumidor

Representa una operación que acepta un argumento con valor de objeto y con valor de entero, y no devuelve ningún resultado.

34

ObjLongConsumer

Representa una operación que acepta un argumento con valor de objeto y uno de valor largo, y no devuelve ningún resultado.

35

Predicado

Representa un predicado (función de valor booleano) de un argumento.

36

Proveedor

Representa un proveedor de resultados.

37

ADobleBiFunción

Representa una función que acepta dos argumentos y produce un resultado de doble valor.

38

ADobleFunción

Representa una función que produce un resultado de valor doble.

39

AIntBiFunción

Representa una función que acepta dos argumentos y produce un resultado de valor entero.

40

AFunciónInt

Representa una función que produce un resultado de valor entero.

41

ALaBiFunciónLarga

Representa una función que acepta dos argumentos y produce un resultado de valor largo.

42

AFunciónLarga

Representa una función que produce un resultado de valor largo.

43

Operador Unario

Representa una operación en un solo operando que produce un resultado del mismo tipo que su operando.


Ejemplo de interfaz funcional

La interfaz de predicado es una interfaz funcional con un método de prueba (objeto) para devolver un valor booleano. Esta interfaz significa que un objeto se prueba para ser verdadero o falso.

Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.

Java8Tester.java

Demostración en 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 + " ");
         }
      }
   }
}

Aquí hemos pasado la interfaz Predicate, que toma una sola entrada y devuelve Boolean.

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente resultado −

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 predeterminados

Java 8 introduce un nuevo concepto de implementación de métodos predeterminados en las interfaces. Esta capacidad se agrega para la compatibilidad con versiones anteriores, de modo que las interfaces antiguas se puedan usar para aprovechar la capacidad de expresión lambda de Java 8.

Por ejemplo, las interfaces 'Lista' o 'Colección' no tienen declaración de método 'forEach'. Por lo tanto, agregar dicho método simplemente romperá las implementaciones del marco de la colección. Java 8 introduce el método predeterminado para que la interfaz Lista/Colección pueda tener una implementación predeterminada del método forEach, y la clase que implementa estas interfaces no necesita implementar lo mismo.

Sintaxis

public interface vehicle {

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

Múltiples valores predeterminados

Con funciones predeterminadas en las interfaces, existe la posibilidad de que una clase esté implementando dos interfaces con los mismos métodos predeterminados. El siguiente código explica cómo se puede resolver esta ambigüedad.

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!");
   }
}

La primera solución es crear un método propio que anule la implementación predeterminada.

public class car implements vehicle, fourWheeler {

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

La segunda solución es llamar al método predeterminado de la interfaz especificada usando super.

public class car implements vehicle, fourWheeler {

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

Métodos predeterminados estáticos

Una interfaz también puede tener métodos auxiliares estáticos desde Java 8 en adelante.

public interface vehicle {

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

Ejemplo de método predeterminado

Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.

Java8Tester.java

Demostración en 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!");
   }
}

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente resultado −

I am a vehicle!
I am a four wheeler!
Blowing horn!!!
I am a car!

Java 8 - Flujos

Stream es una nueva capa abstracta introducida en Java 8. Usando stream, puede procesar datos de una manera declarativa similar a las declaraciones SQL. Por ejemplo, considere la siguiente instrucción SQL.

SELECT max(salary), employee_id, employee_name FROM Employee

La expresión SQL anterior devuelve automáticamente los detalles del empleado asalariado máximo, sin realizar ningún cálculo por parte del desarrollador. Usando el marco de colecciones en Java, un desarrollador tiene que usar bucles y realizar comprobaciones repetidas. Otra preocupación es la eficiencia; como los procesadores multinúcleo están disponibles fácilmente, un desarrollador de Java tiene que escribir un procesamiento de código paralelo que puede ser bastante propenso a errores.

Para resolver estos problemas, Java 8 introdujo el concepto de flujo que permite al desarrollador procesar datos de forma declarativa y aprovechar la arquitectura multinúcleo sin necesidad de escribir ningún código específico para ello.

¿Qué es Corriente?

Stream representa una secuencia de objetos de una fuente, que admite operaciones agregadas. Las siguientes son las características de un Stream −

Generando flujos

Con Java 8, la interfaz de colección tiene dos métodos para generar un Stream.

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

paraCada

Stream ha proporcionado un nuevo método 'forEach' para iterar cada elemento de la secuencia. El siguiente segmento de código muestra cómo imprimir 10 números aleatorios usando forEach.

Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

mapa

El método 'map' se usa para mapear cada elemento a su resultado correspondiente. El siguiente segmento de código imprime cuadrados únicos de números usando el mapa.

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

El método de 'filtro' se utiliza para eliminar elementos en función de un criterio. El siguiente segmento de código imprime un recuento de cadenas vacías mediante filtro.

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");

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

límite

El método de "límite" se utiliza para reducir el tamaño de la corriente. El siguiente segmento de código muestra cómo imprimir 10 números aleatorios usando el límite.

Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

ordenado

El método 'ordenado' se utiliza para ordenar el flujo. El siguiente segmento de código muestra cómo imprimir 10 números aleatorios en un orden ordenado.

Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);

Procesamiento en paralelo

ParallelStream es la alternativa de flujo para el procesamiento paralelo. Eche un vistazo al siguiente segmento de código que imprime un recuento de cadenas vacías utilizando ParalelStream.

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");

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

Es muy fácil cambiar entre flujos secuenciales y paralelos.

Coleccionistas

Los recopiladores se utilizan para combinar el resultado del procesamiento de los elementos de un flujo. Los recopiladores se pueden usar para devolver una lista o una cadena.

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);

Estadísticas

Con Java 8, se introducen recopiladores de estadísticas para calcular todas las estadísticas cuando se realiza el procesamiento de secuencias.

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());

Ejemplo de transmisión

Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.

Java8Tester.java

Demostración en 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();
   }
}

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente 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 - Clase opcional

Opcional es un objeto contenedor que se usa para contener objetos no nulos. El objeto opcional se usa para representar nulo con valor ausente. Esta clase tiene varios métodos de utilidad para facilitar que el código maneje valores como "disponibles" o "no disponibles" en lugar de verificar valores nulos. Se introduce en Java 8 y es similar a Opcional en Guava.

Declaración de clase

La siguiente es la declaración para java.util.Optional clase −

public final class Optional<T> extends Object

Método de clase

Sr.No. Método y descripción
1

estática Opcional vacía()

Devuelve una instancia opcional vacía.

2

igual booleano(Objeto obj)

Indica si algún otro objeto es "igual a" este Opcional.

3

Filtro opcional (predicado predicado)

Si un valor está presente y el valor coincide con un predicado determinado, devuelve un Opcional que describe el valor; de lo contrario, devuelve un Opcional vacío.

4

Opcional flatMap(Función> mapeador)

Si hay un valor presente, se le aplica la función de mapeo de orientación opcional proporcionada, devuelve ese resultado; de lo contrario, devuelve un valor opcional vacío.

5

T get()

Si un valor está presente en este Opcional, devuelve el valor; de lo contrario, arroja NoSuchElementException.

6

código hash int()

Devuelve el valor del código hash del valor actual, si lo hay, o 0 (cero) si no hay ningún valor presente.

7

void ifPresent(Consumidor consumidor)

Si hay un valor presente, invoca al consumidor especificado con el valor; de lo contrario, no hace nada.

8

booleano está presente()

Devuelve verdadero si hay un valor presente; de ​​lo contrario, devuelve falso.

9

Mapa opcional (Función mapeador)

Si hay un valor presente, se le aplica la función de asignación proporcionada y, si el resultado no es nulo, devuelve un Opcional que describe el resultado.

10

estático opcional de (valor T)

Devuelve un Opcional con el valor actual no nulo especificado.

11

estático opcional de Nullable (valor T)

Devuelve un Opcional que describe el valor especificado, si no es nulo; de lo contrario, devuelve un Opcional vacío.

12

T orElse(T otro)

Devuelve el valor si está presente; de ​​lo contrario, devuelve otro.

13

T orElseGet(Proveedor otro)

Devuelve el valor si está presente, de lo contrario invoca otro y devuelve el resultado de esa invocación.

14

T orElseThrow(Proveedor excepciónProveedor)

Devuelve el valor contenido, si está presente; de ​​lo contrario, genera una excepción que debe crear el proveedor proporcionado.

15

Cadena a Cadena()

Devuelve una representación de cadena no vacía de este opcional adecuado para la depuración.

Esta clase hereda métodos de la siguiente clase −

Ejemplo opcional

Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.

Java8Tester.java

Demostración en 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;
   }
}

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente resultado −

First parameter is present: false
Second parameter is present: true
10

Java 8 - JavaScript Nashorn

Con Java 8, Nashorn, se presenta un motor javascript muy mejorado para reemplazar el Rhino existente. Nashorn proporciona un rendimiento de 2 a 10 veces mejor, ya que compila directamente el código en la memoria y pasa el código de bytes a JVM. Nashorn utiliza la característica de dinámica de invocación, introducida en Java 7 para mejorar el rendimiento.

jjs

Para el motor Nashorn, JAVA 8 presenta una nueva herramienta de línea de comandos, jjs, para ejecutar códigos javascript en la consola.

Interpretación del archivo js

Cree y guarde el archivo sample.js en c:\> Carpeta JAVA.

muestra.js

print('Hello World!');

Abra la consola y use el siguiente comando.

C:\JAVA>jjs sample.js

Producirá el siguiente resultado:

Hello World!

jjs en modo interactivo

Abra la consola y use el siguiente comando.

C:\JAVA>jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>

Aprobar argumentos

Abra la consola y use el siguiente comando.

C:\JAVA> jjs -- a b c
jjs> print('letters: ' +arguments.join(", "))
letters: a, b, c
jjs>

Llamar JavaScript desde Java

Usando ScriptEngineManager, el código JavaScript se puede llamar e interpretar en Java.

Ejemplo

Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.

Java8Tester.java

Demostración en 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());
   }
}

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente resultado −

Mahesh
12

Llamar a Java desde JavaScript

El siguiente ejemplo explica cómo importar y usar clases de Java en java script.

Cree y guarde sample.js en c:\> Carpeta JAVA.

muestra.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 la consola y use el siguiente comando.

C:\JAVA>jjs sample.js

Debería producir el siguiente resultado −

78952000000000000003.20

Java 8 - Nueva API de fecha/hora

Con Java 8, se presenta una nueva API de fecha y hora para cubrir los siguientes inconvenientes de la antigua API de fecha y hora.

Java 8 presenta una nueva API de fecha y hora bajo el paquete java.time. Las siguientes son algunas de las clases importantes introducidas en el paquete java.time.

API de fecha y hora local

Las clases LocalDate/LocalTime y LocalDateTime simplifican el desarrollo donde no se requieren zonas horarias. Veámoslos en acción.

Cree el siguiente programa java usando cualquier editor de su elección en, por ejemplo, C:\> JAVA.

Java8Tester.java

Demostración en 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);
   }
}

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente resultado −

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 de fecha y hora por zonas

La API de fecha y hora dividida en zonas se utilizará cuando se considere la zona horaria. Veámoslos en acción.

Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.

Java8Tester.java

Demostración en 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);
   }
}

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente resultado −

date1: 2007-12-03T10:15:30+05:00[Asia/Karachi]
ZoneId: Europe/Paris
CurrentZone: Etc/UTC

Enumeración de unidades de crono

La enumeración java.time.temporal.ChronoUnit se agrega en Java 8 para reemplazar los valores enteros utilizados en la antigua API para representar el día, el mes, etc. Veámoslos en acción.

Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.

Java8Tester.java

Demostración en 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);
   }
}

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente 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 y Duración

Con Java 8, se introducen dos clases especializadas para hacer frente a las diferencias horarias.

Veámoslos en acción.

Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.

Java8Tester.java

Demostración en 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);
   }
}

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente resultado −

Current date: 2014-12-10
Next month: 2015-01-10
Period: P-1M
Duration: PT2H

Ajustadores Temporales

TemporalAdjuster se utiliza para realizar las matemáticas de fecha. Por ejemplo, obtenga el "Segundo sábado del mes" o "Próximo martes". Veámoslos en acción.

Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.

Java8Tester.java

Demostración en 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);
   }
}

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente resultado −

Current date: 2014-12-10
Next Tuesday on : 2014-12-16
Second Saturday on : 2014-12-13

Compatibilidad con versiones anteriores

Se agrega un método toInstant() a los objetos de fecha y calendario originales, que se puede usar para convertirlos a la nueva API de fecha y hora. Use un método ofInstant(Insant,ZoneId) para obtener un objeto LocalDateTime o ZonedDateTime. Veámoslos en acción.

Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.

Java8Tester.java

Demostración en 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);
   }
}

Verificar el resultado

Compile la clase usando javac compilador de la siguiente manera −

C:\JAVA>javac Java8Tester.java

Ahora ejecute Java8Tester de la siguiente manera −

C:\JAVA>java Java8Tester

Debería producir el siguiente resultado −

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

Con Java 8, Base64 finalmente obtuvo su merecido. Java 8 ahora tiene un codificador y decodificador incorporado para la codificación Base64. En Java 8, podemos usar tres tipos de codificación Base64.

Clases anidadas

Sr.No. Clase anidada y descripción
1

clase estática Base64.Decoder

Esta clase implementa un decodificador para decodificar datos de bytes usando el esquema de codificación Base64 como se especifica en RFC 4648 y RFC 2045.

2

clase estática Base64.Encoder

Esta clase implementa un codificador para codificar datos de bytes usando el esquema de codificación Base64 como se especifica en RFC 4648 y RFC 2045.

Métodos

Sr.No. Method Name &Description
1

static Base64.Decoder getDecoder()

Returns a Base64.Decoder that decodes using the Basic type base64 encoding scheme.

2

static Base64.Encoder getEncoder()

Returns a Base64.Encoder that encodes using the Basic type base64 encoding scheme.

3

static Base64.Decoder getMimeDecoder()

Returns a Base64.Decoder that decodes using the MIME type base64 decoding scheme.

4

static Base64.Encoder getMimeEncoder()

Returns a Base64.Encoder that encodes using the MIME type base64 encoding scheme.

5

static Base64.Encoder getMimeEncoder(int lineLength, byte[] lineSeparator)

Returns a Base64.Encoder that encodes using the MIME type base64 encoding scheme with specified line length and line separators.

6

static Base64.Decoder getUrlDecoder()

Returns a Base64.Decoder that decodes using the URL and Filename safe type base64 encoding scheme.

7

static Base64.Encoder getUrlEncoder()

Returns a Base64.Encoder that encodes using the URL and Filename safe type base64 encoding scheme.

Methods Inherited

This class inherits methods from the following class −

Base64 Example

Create the following Java program using any editor of your choice in say C:/> JAVA.

Java8Tester.java

Live Demo
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());
      }
   }
}

Verify the Result

Compile the class using javac compiler as follows −

C:\JAVA>javac Java8Tester.java

Now run the Java8Tester as follows −

C:\JAVA>java Java8Tester

It should produce the following output −

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. Java Vector
  2. Fresado:una guía rápida
  3. Guía rápida para el desarrollo y la ejecución de PM
  4. Una guía rápida de seguros para la interrupción de la cadena de suministro
  5. Una guía rápida para la máquina dobladora de tubos cuadrados
  6. Una guía rápida para la máquina de prensado en frío
  7. Una guía rápida para la caja de engranajes planetarios
  8. Una guía rápida para Jet Mill Drill
  9. Una guía rápida para la máquina de prensa servo
  10. Una guía rápida para cilindros neumáticos
  11. Una guía rápida para Gear Decoiler