Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Java 8 - Guide rapide

Java 8 - Présentation

JAVA 8 est une version majeure du développement du langage de programmation JAVA. Sa version initiale a été publiée le 18 mars 2014. Avec la version Java 8, Java a fourni des supports pour la programmation fonctionnelle, un nouveau moteur JavaScript, de nouvelles API pour la manipulation de la date et de l'heure, une nouvelle API de streaming, etc.

Nouvelles fonctionnalités

Considérez l'extrait de code suivant.

Démo en direct
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));
   }
}

Exécutez le programme pour obtenir le résultat suivant.

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

Ici le sortUsingJava8() La méthode utilise la fonction de tri avec une expression lambda comme paramètre pour obtenir les critères de tri.

Java 8 - Configuration de l'environnement

Configuration de l'environnement local

Si vous souhaitez configurer votre propre environnement pour le langage de programmation Java, cette section vous guide tout au long du processus. Veuillez suivre les étapes ci-dessous pour configurer votre environnement Java.

Java SE peut être téléchargé gratuitement à partir du lien suivant −

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

Vous téléchargez une version basée sur votre système d'exploitation.

Suivez les instructions pour télécharger Java et exécutez le .exe pour installer Java sur votre machine. Une fois que vous avez installé Java sur votre machine, vous devez définir des variables d'environnement pour qu'elles pointent vers les répertoires d'installation corrects.

Configuration du chemin pour Windows 2000/XP

En supposant que vous avez installé Java dans le répertoire c:\Program Files\java\jdk −

Configuration du chemin pour Windows 95/98/ME

En supposant que vous avez installé Java dans le répertoire c:\Program Files\java\jdk −

Configuration du chemin pour Linux, UNIX, Solaris, FreeBSD

La variable d'environnement PATH doit être définie pour pointer vers l'endroit où les binaires Java ont été installés. Reportez-vous à la documentation de votre shell si vous rencontrez des difficultés pour effectuer cette opération.

Par exemple, si vous utilisez bash comme shell, vous ajouterez la ligne suivante à la fin de votre '.bashrc :export PATH=/path/to/java:$PATH'

Éditeurs Java populaires

Pour écrire des programmes Java, vous avez besoin d'un éditeur de texte. Il existe des IDE encore plus sophistiqués disponibles sur le marché. Mais pour l'instant, vous pouvez envisager l'une des options suivantes −

Java 8 - Expressions lambda

Les expressions lambda sont introduites dans Java 8 et sont présentées comme la plus grande fonctionnalité de Java 8. L'expression lambda facilite la programmation fonctionnelle et simplifie beaucoup le développement.

Syntaxe

Une expression lambda est caractérisée par la syntaxe suivante.

parameter -> expression body

Voici les caractéristiques importantes d'une expression lambda.

Exemple d'expression Lambda

Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.

Java8Tester.java

Démo en direct
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);
   }
}

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Il devrait produire la sortie suivante −

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

Voici les points importants à prendre en compte dans l'exemple ci-dessus.

Portée

À l'aide de l'expression lambda, vous pouvez faire référence à n'importe quelle variable finale ou à une variable effectivement finale (qui n'est affectée qu'une seule fois). L'expression Lambda génère une erreur de compilation, si une variable se voit attribuer une valeur la deuxième fois.

Exemple de portée

Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.

Java8Tester.java

Démo en direct
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);
   }
}

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Il devrait produire la sortie suivante −

Hello! Mahesh

Java 8 - Références des méthodes

Les références de méthode aident à pointer vers les méthodes par leurs noms. Une référence de méthode est décrite à l'aide du symbole " ::". Une référence de méthode peut être utilisée pour pointer les types de méthodes suivants −

Exemple de référence de méthode

Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, 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);
   }
}

Ici, nous avons passé la méthode System.out ::println comme référence de méthode statique.

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Il devrait produire la sortie suivante −

Mahesh
Suresh
Ramesh
Naresh
Kalpesh

Java 8 - Interfaces fonctionnelles

Les interfaces fonctionnelles ont une seule fonctionnalité à présenter. Par exemple, une interface Comparable avec une seule méthode « compareTo » est utilisée à des fins de comparaison. Java 8 a défini de nombreuses interfaces fonctionnelles à utiliser de manière intensive dans les expressions lambda. Voici la liste des interfaces fonctionnelles définies dans le package java.util.Function.


BiConsommateur

Représente une opération qui accepte deux arguments d'entrée et ne renvoie aucun résultat.

BiFonction

Représente une fonction qui accepte deux arguments et produit un résultat.

OpérateurBinaire

Représente une opération sur deux opérandes du même type, produisant un résultat du même type que les opérandes.

Biprédicat

Représente un prédicat (fonction booléenne) de deux arguments.

Fournisseur booléen

Représente un fournisseur de résultats booléens.

Consommateur

Représente une opération qui accepte un seul argument d'entrée et ne renvoie aucun résultat.

OpérateurBinaireDouble

Représente une opération sur deux opérandes à valeur double et produisant un résultat à valeur double.

Double Consommateur

Représente une opération qui accepte un seul argument à valeur double et ne renvoie aucun résultat.

DoubleFonction

Représente une fonction qui accepte un argument à valeur double et produit un résultat.

Doubleprédicat

Représente un prédicat (fonction booléenne) d'un argument à valeur double.

Double fournisseur

Représente un fournisseur de résultats à double valeur.

DoubleVersIntFonction

Représente une fonction qui accepte un argument à valeur double et produit un résultat à valeur int.

DoubleToLongFonction

Représente une fonction qui accepte un argument à valeur double et produit un résultat à valeur longue.

DoubleUnaryOperator

Représente une opération sur un seul opérande à double valeur qui produit un résultat à double valeur.

Fonction

Représente une fonction qui accepte un argument et produit un résultat.

OpérateurBinaryInt

Représente une opération sur deux opérandes de valeur int et produit un résultat de valeur int.

IntConsumer

Représente une opération qui accepte un seul argument de valeur int et ne renvoie aucun résultat.

IntFonction

Représente une fonction qui accepte un argument de valeur int et produit un résultat.

IntPrédicat

Représente un prédicat (fonction à valeur booléenne) d'un argument à valeur int.

Fournisseur Int

Représente un fournisseur de résultats à valeur int.

IntToDoubleFonction

Représente une fonction qui accepte un argument à valeur int et produit un résultat à valeur double.

Fonction IntToLong

Représente une fonction qui accepte un argument de valeur int et produit un résultat de valeur longue.

IntUnaryOperator

Représente une opération sur un seul opérande de valeur int qui produit un résultat de valeur int.

OpérateurLongBinary

Représente une opération sur deux opérandes de valeur longue et produit un résultat de valeur longue.

Longue consommation

Représente une opération qui accepte un seul argument de valeur longue et ne renvoie aucun résultat.

LongueFonction

Représente une fonction qui accepte un argument de valeur longue et produit un résultat.

LongPrédicat

Représente un prédicat (fonction booléenne) d'un argument à valeur longue.

Fournisseur long

Représente un fournisseur de résultats à long terme.

FonctionLongToDouble

Représente une fonction qui accepte un argument à valeur longue et produit un résultat à valeur double.

LongToIntFonction

Représente une fonction qui accepte un argument de valeur longue et produit un résultat de valeur int.

OpérateurLongUnaire

Représente une opération sur un seul opérande de valeur longue qui produit un résultat de valeur longue.

ObjDoubleConsumer

Représente une opération qui accepte un argument à valeur objet et un argument à valeur double, et ne renvoie aucun résultat.

ObjIntConsumer

Représente une opération qui accepte un argument de valeur objet et un argument de valeur int, et ne renvoie aucun résultat.

ObjLongConsumer

Représente une opération qui accepte un argument de valeur objet et un argument de valeur longue, et ne renvoie aucun résultat.

Prédicat

Représente un prédicat (fonction booléenne) d'un argument.

Fournisseur

Représente un fournisseur de résultats.

VersDoubleBiFonction

Représente une fonction qui accepte deux arguments et produit un résultat à double valeur.

ToDoubleFunction

Représente une fonction qui produit un résultat à valeur double.

VersIntBiFonction

Représente une fonction qui accepte deux arguments et produit un résultat de valeur int.

ToIntFunction

Représente une fonction qui produit un résultat de valeur int.

ToLongBiFunction

Représente une fonction qui accepte deux arguments et produit un résultat long.

ToLongFunction

Représente une fonction qui produit un résultat à valeur longue.

Opérateurunaire

Représente une opération sur un seul opérande qui produit un résultat du même type que son opérande.

Sr.No. Interface et description
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

Exemple d'interface fonctionnelle

L'interface de prédicat est une interface fonctionnelle avec une méthode test(Object) pour renvoyer une valeur booléenne. Cette interface signifie qu'un objet est testé pour être vrai ou faux.

Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.

Java8Tester.java

Démo en direct
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 + " ");
         }
      }
   }
}

Ici, nous avons passé l'interface Predicate, qui prend une seule entrée et renvoie un booléen.

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Il devrait produire la sortie suivante −

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éthodes par défaut

Java 8 introduit un nouveau concept d'implémentation de méthode par défaut dans les interfaces. Cette capacité est ajoutée pour la compatibilité descendante afin que les anciennes interfaces puissent être utilisées pour tirer parti de la capacité d'expression lambda de Java 8.

Par exemple, les interfaces "List" ou "Collection" n'ont pas de déclaration de méthode "forEach". Ainsi, l'ajout d'une telle méthode cassera simplement les implémentations du framework de collecte. Java 8 introduit la méthode par défaut afin que l'interface List/Collection puisse avoir une implémentation par défaut de la méthode forEach, et la classe implémentant ces interfaces n'a pas besoin d'implémenter la même chose.

Syntaxe

public interface vehicle {

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

Plusieurs valeurs par défaut

Avec les fonctions par défaut dans les interfaces, il est possible qu'une classe implémente deux interfaces avec les mêmes méthodes par défaut. Le code suivant explique comment cette ambiguïté peut être résolue.

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 première solution consiste à créer une méthode propre qui remplace l'implémentation par défaut.

public class car implements vehicle, fourWheeler {

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

La deuxième solution consiste à appeler la méthode par défaut de l'interface spécifiée à l'aide de super.

public class car implements vehicle, fourWheeler {

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

Méthodes statiques par défaut

Une interface peut également avoir des méthodes d'assistance statiques à partir de Java 8.

public interface vehicle {

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

Exemple de méthode par défaut

Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.

Java8Tester.java

Démo en direct
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!");
   }
}

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Il devrait produire la sortie suivante −

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

Java 8 - Flux

Stream est une nouvelle couche abstraite introduite dans Java 8. En utilisant Stream, vous pouvez traiter les données de manière déclarative similaire aux instructions SQL. Par exemple, considérez l'instruction SQL suivante.

SELECT max(salary), employee_id, employee_name FROM Employee

L'expression SQL ci-dessus renvoie automatiquement les détails de l'employé salarié maximum, sans effectuer de calcul du côté du développeur. En utilisant le framework de collections en Java, un développeur doit utiliser des boucles et effectuer des vérifications répétées. Une autre préoccupation est l'efficacité; comme les processeurs multicœurs sont facilement disponibles, un développeur Java doit écrire un traitement de code parallèle qui peut être assez sujet aux erreurs.

Pour résoudre ces problèmes, Java 8 a introduit le concept de flux qui permet au développeur de traiter les données de manière déclarative et de tirer parti de l'architecture multicœur sans avoir à écrire de code spécifique pour celle-ci.

Qu'est-ce que le flux ?

Stream représente une séquence d'objets à partir d'une source, qui prend en charge les opérations d'agrégation. Voici les caractéristiques d'un Stream −

Générer des flux

Avec Java 8, l'interface Collection dispose de deux méthodes pour générer un flux.

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

pour chaque

Stream a fourni une nouvelle méthode ‘forEach’ pour itérer chaque élément du flux. Le segment de code suivant montre comment imprimer 10 nombres aléatoires à l'aide de forEach.

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

carte

La méthode ‘map’ est utilisée pour mapper chaque élément à son résultat correspondant. Le segment de code suivant imprime des carrés uniques de nombres à l'aide de 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());

filtrer

La méthode « filtre » est utilisée pour éliminer des éléments en fonction d'un critère. Le segment de code suivant imprime un nombre de chaînes vides à l'aide du filtre.

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

La méthode ‘limit’ est utilisée pour réduire la taille du flux. Le segment de code suivant montre comment imprimer 10 nombres aléatoires en utilisant limit.

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

trié

La méthode ‘sorted’ est utilisée pour trier le flux. Le segment de code suivant montre comment imprimer 10 nombres aléatoires dans un ordre trié.

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

Traitement parallèle

parallelStream est l'alternative de stream pour le traitement parallèle. Jetez un œil au segment de code suivant qui imprime un nombre de chaînes vides à l'aide de 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();

Il est très facile de basculer entre les flux séquentiels et parallèles.

Collectionneurs

Les collecteurs permettent de combiner le résultat d'un traitement sur les éléments d'un flux. Les collecteurs peuvent être utilisés pour renvoyer une liste ou une chaîne.

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

Statistiques

Avec Java 8, des collecteurs de statistiques sont introduits pour calculer toutes les statistiques lorsque le traitement de flux est en cours.

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

Exemple de flux

Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.

Java8Tester.java

Démo en direct
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();
   }
}

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Cela devrait produire le résultat suivant −

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 facultative

Facultatif est un objet conteneur utilisé pour contenir des objets non nuls. L'objet facultatif est utilisé pour représenter null avec une valeur absente. Cette classe a diverses méthodes utilitaires pour permettre au code de gérer les valeurs comme « disponibles » ou « non disponibles » au lieu de vérifier les valeurs nulles. Il est introduit dans Java 8 et est similaire à ce qu'est Optional dans Guava.

Déclaration de classe

Voici la déclaration pour java.util.Optional classe −

public final class Optional<T> extends Object

Méthode de classe

statique Facultatif vide()

Renvoie une instance facultative vide.

booléen égal à(Object obj)

Indique si un autre objet est "égal à" ce Facultatif.

Filtre facultatif (prédicat prédicat)

Si une valeur est présente et que la valeur correspond à un prédicat donné, elle renvoie un Facultatif décrivant la valeur, sinon renvoie un Facultatif vide.

Facultatif flatMap(Fonction> mappeur)

Si une valeur est présente, elle lui applique la fonction de mappage de roulement facultatif fournie, renvoie ce résultat, sinon renvoie un facultatif vide.

T get()

Si une valeur est présente dans ce Facultatif, renvoie la valeur, sinon lève NoSuchElementException.

int hashCode()

Renvoie la valeur du code de hachage de la valeur actuelle, le cas échéant, ou 0 (zéro) si aucune valeur n'est présente.

annuler ifPresent(Consumerconsommateur)

Si une valeur est présente, il appelle le consommateur spécifié avec la valeur, sinon ne fait rien.

booléen isPresent()

Renvoie vrai si une valeur est présente, sinon faux.

Carte facultative(Fonction mappeur)

Si une valeur est présente, applique la fonction de mappage fournie, et si le résultat n'est pas nul, renvoie un Facultatif décrivant le résultat.

statique Facultatif de (valeur T)

Renvoie un Facultatif avec la valeur actuelle non nulle spécifiée.

statique Facultatif deNullable(valeur T)

Renvoie un Facultatif décrivant la valeur spécifiée, si non nul, sinon renvoie un Facultatif vide.

T orElse(T autre)

Renvoie la valeur si elle est présente, sinon renvoie autre.

T orElseGet(Fournisseur autre)

Renvoie la valeur si elle est présente, sinon invoque autre et renvoie le résultat de cette invocation.

T orElseThrow(Fournisseur exceptionFournisseur)

Renvoie la valeur contenue, si elle est présente, sinon lève une exception à créer par le fournisseur fourni.

Chaîne àChaîne()

Renvoie une représentation sous forme de chaîne non vide de ce Facultatif adapté au débogage.

Sr.No. Méthode et description
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Cette classe hérite des méthodes de la classe suivante −

  • java.lang.Object

Exemple facultatif

Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.

Java8Tester.java

Démo en direct
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;
   }
}

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Il devrait produire la sortie suivante −

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

Java 8 - JavaScript Nashorn

Avec Java 8, Nashorn, un moteur javascript bien amélioré est introduit, pour remplacer le Rhino existant. Nashorn offre des performances 2 à 10 fois meilleures, car il compile directement le code en mémoire et transmet le bytecode à la JVM. Nashorn utilise la fonctionnalité d'invocation dynamique, introduite dans Java 7 pour améliorer les performances.

jjs

Pour le moteur Nashorn, JAVA 8 introduit un nouvel outil de ligne de commande, jjs, pour exécuter des codes javascript sur la console.

Interpréter le fichier js

Créez et enregistrez le fichier sample.js dans c:\> dossier JAVA.

exemple.js

print('Hello World!');

Ouvrez la console et utilisez la commande suivante.

C:\JAVA>jjs sample.js

Il produira la sortie suivante :

Hello World!

jjs en mode interactif

Ouvrez la console et utilisez la commande suivante.

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

Passer les arguments

Ouvrez la console et utilisez la commande suivante.

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

Appeler JavaScript depuis Java

À l'aide de ScriptEngineManager, le code JavaScript peut être appelé et interprété en Java.

Exemple

Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.

Java8Tester.java

Démo en direct
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());
   }
}

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Cela devrait produire le résultat suivant −

Mahesh
12

Appeler Java depuis JavaScript

L'exemple suivant explique comment importer et utiliser des classes Java en java script.

Créez et enregistrez sample.js dans c:\> dossier JAVA.

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

Ouvrez la console et utilisez la commande suivante.

C:\JAVA>jjs sample.js

Il devrait produire la sortie suivante −

78952000000000000003.20

Java 8 - Nouvelle API Date/Heure

Avec Java 8, une nouvelle API Date-Heure est introduite pour couvrir les inconvénients suivants de l'ancienne API Date-Heure.

  • Non thread-safe − java.util.Date n'est pas thread-safe, les développeurs doivent donc faire face à un problème de concurrence lors de l'utilisation de date. La nouvelle API date-heure est immuable et n'a pas de méthodes de définition.

  • Mauvaise conception − La date par défaut commence à partir de 1900, le mois commence à partir de 1 et le jour commence à partir de 0, donc pas d'uniformité. L'ancienne API avait des méthodes moins directes pour les opérations de date. La nouvelle API fournit de nombreuses méthodes utilitaires pour de telles opérations.

  • Gestion difficile du fuseau horaire − Les développeurs ont dû écrire beaucoup de code pour gérer les problèmes de fuseau horaire. La nouvelle API a été développée en gardant à l'esprit la conception spécifique au domaine.

Java 8 introduit une nouvelle API date-heure sous le package java.time. Voici quelques-unes des classes importantes introduites dans le package java.time.

  • Local − API date-heure simplifiée sans complexité de gestion du fuseau horaire.

  • Zonisé − API date-heure spécialisée pour gérer différents fuseaux horaires.

API de date-heure locale

Les classes LocalDate/LocalTime et LocalDateTime simplifient le développement là où les fuseaux horaires ne sont pas nécessaires. Voyons-les en action.

Créez le programme Java suivant en utilisant n'importe quel éditeur de votre choix dans, par exemple, C:\> JAVA.

Java8Tester.java

Démo en direct
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);
   }
}

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Il devrait produire la sortie suivante −

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 date-heure zonée

L'API date-heure zonée doit être utilisée lorsque le fuseau horaire doit être pris en compte. Voyons-les en action.

Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.

Java8Tester.java

Démo en direct
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);
   }
}

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Il devrait produire la sortie suivante −

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

Énumération des unités chrono

L'énumération java.time.temporal.ChronoUnit est ajoutée dans Java 8 pour remplacer les valeurs entières utilisées dans l'ancienne API pour représenter le jour, le mois, etc. Voyons-les en action.

Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.

Java8Tester.java

Démo en direct
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);
   }
}

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Cela devrait produire le résultat suivant −

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

Période et durée

Avec Java 8, deux classes spécialisées sont introduites pour gérer les décalages horaires.

  • Période − Il traite de la durée basée sur la date.

  • Durée − Il traite de la durée basée sur le temps.

Voyons-les en action.

Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.

Java8Tester.java

Démo en direct
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);
   }
}

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Il devrait produire la sortie suivante −

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

Ajusteurs temporels

TemporalAdjuster est utilisé pour effectuer les calculs de date. Par exemple, obtenez le "Deuxième samedi du mois" ou "Mardi prochain". Voyons-les en action.

Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.

Java8Tester.java

Démo en direct
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);
   }
}

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Cela devrait produire le résultat suivant −

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

Compatibilité descendante

Une méthode toInstant() est ajoutée aux objets Date et Calendar d'origine, qui peuvent être utilisés pour les convertir vers la nouvelle API Date-Heure. Utilisez une méthode ofInstant(Insant,ZoneId) pour obtenir un objet LocalDateTime ou ZonedDateTime. Voyons-les en action.

Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.

Java8Tester.java

Démo en direct
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);
   }
}

Vérifier le résultat

Compilez la classe en utilisant javac compilateur comme suit −

C:\JAVA>javac Java8Tester.java

Exécutez maintenant le Java8Tester comme suit −

C:\JAVA>java Java8Tester

Il devrait produire la sortie suivante −

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

Avec Java 8, Base64 a enfin eu raison. Java 8 dispose désormais d'un encodeur et d'un décodeur intégrés pour l'encodage Base64. En Java 8, nous pouvons utiliser trois types d'encodage Base64.

  • Simple − La sortie est mappée sur un ensemble de caractères se trouvant dans A-Za-z0-9+/. L'encodeur n'ajoute aucun saut de ligne en sortie et le décodeur rejette tout caractère autre que A-Za-z0-9+/.

  • URL − La sortie est mappée sur un ensemble de caractères se trouvant dans A-Za-z0-9+_. La sortie est sûre pour les URL et les noms de fichiers.

  • MIME − La sortie est mappée au format convivial MIME. La sortie est représentée par des lignes de 76 caractères maximum chacune et utilise un retour chariot '\r' suivi d'un saut de ligne '\n' comme séparateur de ligne. Aucun séparateur de ligne n'est présent à la fin de la sortie codée.

Classes imbriquées

classe statique Base64.Decoder

Cette classe implémente un décodeur pour décoder les données d'octet à l'aide du schéma de codage Base64 comme spécifié dans RFC 4648 et RFC 2045.

classe statique Base64.Encoder

Cette classe implémente un encodeur pour encoder les données d'octet à l'aide du schéma d'encodage Base64 comme spécifié dans RFC 4648 et RFC 2045.

Sr.No. Classe imbriquée et description
1
2

Méthodes

static Base64.Decoder getDecoder()

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

static Base64.Encoder getEncoder()

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

static Base64.Decoder getMimeDecoder()

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

static Base64.Encoder getMimeEncoder()

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

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.

static Base64.Decoder getUrlDecoder()

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

static Base64.Encoder getUrlEncoder()

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

Sr.No. Nom et description de la méthode
1
2
3
4
5
6
7

Methods Inherited

This class inherits methods from the following class −

  • java.lang.Object

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 vecteur
  2. Fraisage – Un guide rapide
  3. Guide rapide sur le développement et l'exécution de PM
  4. Guide rapide sur l'assurance en cas d'interruption de la chaîne d'approvisionnement
  5. Un guide rapide de la machine à cintrer les tubes carrés
  6. Un guide rapide de la presse à froid
  7. Un guide rapide de la boîte de vitesses planétaire
  8. Un guide rapide pour Jet Mill Drill
  9. Un guide rapide de la machine de presse servo