Goyave - Guide rapide
Qu'est-ce que la goyave?
Guava est une bibliothèque open source basée sur Java et contient de nombreuses bibliothèques de base de Google, qui sont utilisées dans nombre de leurs projets. Il facilite les meilleures pratiques de codage et aide à réduire les erreurs de codage. Il fournit des méthodes utilitaires pour les collections, la mise en cache, la prise en charge des primitives, la concurrence, les annotations communes, le traitement des chaînes, les E / S et les validations.
Avantages de la goyave
Standardized - La bibliothèque Guava est gérée par Google.
Efficient - C'est une extension fiable, rapide et efficace de la bibliothèque standard Java.
Optimized - La bibliothèque est hautement optimisée.
Functional Programming - Il ajoute une capacité de traitement fonctionnelle à Java.
Utilities - Il fournit de nombreuses classes d'utilitaires qui sont régulièrement requises dans le développement d'applications de programmation.
Validation - Il fournit un mécanisme de validation de sécurité standard.
Best Practices - Il met l'accent sur les meilleures pratiques.
Considérez l'extrait de code suivant.
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
Integer a = null;
Integer b = new Integer(10);
System.out.println(guavaTester.sum(a,b));
}
public Integer sum(Integer a, Integer b) {
return a + b;
}
}
Exécutez le programme pour obtenir le résultat suivant.
Exception in thread "main" java.lang.NullPointerException
at GuavaTester.sum(GuavaTester.java:13)
at GuavaTester.main(GuavaTester.java:9)
Voici les problèmes avec le code.
sum () ne prend en charge aucun des paramètres à passer comme null.
La fonction appelante ne craint pas non plus de passer accidentellement un null à la méthode sum ().
Lorsque le programme s'exécute, NullPointerException se produit.
Afin d'éviter les problèmes ci-dessus, un contrôle nul doit être effectué à chaque endroit où de tels problèmes sont présents.
Voyons l'utilisation de Optional, une classe Utility fournie par Guava, pour résoudre les problèmes ci-dessus de manière standardisée.
import com.google.common.base.Optional;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
Integer invalidInput = null;
Optional<Integer> a = Optional.of(invalidInput);
Optional<Integer> b = Optional.of(new Integer(10));
System.out.println(guavaTester.sum(a,b));
}
public Integer sum(Optional<Integer> a, Optional<Integer> b) {
return a.get() + b.get();
}
}
Exécutez le programme pour obtenir le résultat suivant.
Exception in thread "main" java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:210)
at com.google.common.base.Optional.of(Optional.java:85)
at GuavaTester.main(GuavaTester.java:8)
Comprenons les concepts importants du programme ci-dessus.
Optional - Une classe utilitaire, pour que le code utilise correctement la valeur null.
Optional.of- Il renvoie l'instance de la classe facultative à utiliser comme paramètre. Il vérifie que la valeur transmise n'est pas «nulle».
Optional.get - Il récupère la valeur de l'entrée stockée dans la classe Optional.
À l'aide de la classe Optional, vous pouvez vérifier si la méthode de l'appelant transmet un paramètre approprié ou non.
Configuration de l'environnement local
Si vous souhaitez toujours configurer votre environnement pour le langage de programmation Java, cette section vous explique comment télécharger et configurer Java sur votre machine. Veuillez suivre les étapes mentionnées ci-dessous pour configurer l'environnement.
Java SE est disponible gratuitement à partir du lien Télécharger Java . Vous téléchargez donc une version basée sur votre système d'exploitation.
Suivez les instructions pour télécharger Java et exécuter le .exepour installer Java sur votre machine. Une fois que vous avez installé Java sur votre machine, vous devez définir les variables d'environnement pour qu'elles pointent vers les répertoires d'installation corrects -
Configuration du chemin pour Windows 2000 / XP
Nous supposons que vous avez installé Java dans le répertoire c: \ Program Files \ java \ jdk -
Cliquez avec le bouton droit sur «Poste de travail» et sélectionnez «Propriétés».
Cliquez sur le bouton «Variables d'environnement» sous l'onglet «Avancé».
Maintenant, modifiez la variable «Path» afin qu'elle contienne également le chemin vers l'exécutable Java. Exemple, si le chemin est actuellement défini sur «C: \ WINDOWS \ SYSTEM32», modifiez votre chemin pour lire «C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin».
Configuration du chemin pour Windows 95/98 / ME
Nous supposons que vous avez installé Java dans le répertoire c: \ Program Files \ java \ jdk -
Modifiez le fichier 'C: \ autoexec.bat' et ajoutez la ligne suivante à la fin - 'SET PATH =% PATH%; C: \ Program Files \ java \ jdk \ bin'
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 problèmes pour cela.
Exemple, si vous utilisez bash comme shell, vous ajouteriez la ligne suivante à la fin de votre '.bashrc: export PATH = / path / to / java: $ PATH'
Éditeurs Java populaires
Pour écrire vos programmes Java, vous avez besoin d'un éditeur de texte. Il existe de nombreux IDE sophistiqués disponibles sur le marché. Mais pour l'instant, vous pouvez envisager l'un des éléments suivants -
Notepad - Sur la machine Windows, vous pouvez utiliser n'importe quel éditeur de texte simple comme Notepad (recommandé pour ce tutoriel), TextPad.
Netbeans - Il s'agit d'un IDE Java open-source et gratuit qui peut être téléchargé depuis https://www.netbeans.org/index.html.
Eclipse - C'est aussi un IDE Java développé par la communauté open source eclipse et peut être téléchargé depuis https://www.eclipse.org/.
Télécharger Guava Archive
Téléchargez la dernière version du fichier jar Guava à partir de guava-18.0.jar . Au moment de la rédaction de ce didacticiel, nous avons téléchargé guava-18.0.jar et l' avons copié dans le dossier C: \> Guava.
OS | Nom de l'archive |
---|---|
les fenêtres | goyave-18.0.jar |
Linux | goyave-18.0.jar |
Mac | goyave-18.0.jar |
Définir l'environnement de la goyave
Met le Guava_HOMEvariable d'environnement pour pointer vers l'emplacement du répertoire de base où le jar Guava est stocké sur votre machine. En supposant que nous avons extrait guava-18.0.jar dans le dossier Guava sur divers systèmes d'exploitation comme suit.
OS | Production |
---|---|
les fenêtres | Définissez la variable d'environnement Guava_HOME sur C: \ Guava |
Linux | export Guava_HOME = / usr / local / Guava |
Mac | export Guava_HOME = / Bibliothèque / Guava |
Définir la variable CLASSPATH
Met le CLASSPATHvariable d'environnement pour pointer vers l'emplacement du pot Guava. En supposant que vous ayez stocké guava-18.0.jar dans le dossier Guava sur divers systèmes d'exploitation comme suit.
OS | Production |
---|---|
les fenêtres | Définissez la variable d'environnement CLASSPATH sur% CLASSPATH%;% Guava_HOME% \ guava-18.0.jar;.; |
Linux | export CLASSPATH = $ CLASSPATH: $ Guava_HOME / guava-18.0.jar :. |
Mac | export CLASSPATH = $ CLASSPATH: $ Guava_HOME / guava-18.0.jar :. |
Facultatif est un objet immuable utilisé pour contenir un objet non nul. L'objet facultatif est utilisé pour représenter null avec une valeur absente. Cette classe a diverses méthodes utilitaires pour faciliter le code pour gérer les valeurs disponibles ou non disponibles au lieu de vérifier les valeurs nulles.
Déclaration de classe
Voici la déclaration pour com.google.common.base.Optional<T> classe -
@GwtCompatible(serializable = true)
public abstract class Optional<T>
extends Object
implements Serializable
Méthodes de classe
Sr.Non | Méthode et description |
---|---|
1 | static <T> Optional<T> absent() Renvoie une instance facultative sans référence contenue. |
2 | abstract Set<T> asSet() Renvoie un ensemble de singleton immuable dont le seul élément est l'instance contenue s'il est présent; un ensemble immuable vide autrement. |
3 | abstract boolean equals(Object object) Renvoie true si object est une instance facultative et que les références contenues sont égales l'une à l'autre ou les deux sont absentes. |
4 | static <T> Optional<T> fromNullable(T nullableReference) Si nullableReference est non nul, renvoie une instance facultative contenant cette référence; sinon renvoie absent (). |
5 | abstract T get() Renvoie l'instance contenue, qui doit être présente. |
6 | abstract int hashCode() Renvoie un code de hachage pour cette instance. |
sept | abstract boolean isPresent() Renvoie true si ce conteneur contient une instance (non nulle). |
8 | static <T> Optional<T> of(T reference) Renvoie une instance facultative contenant la référence non nulle donnée. |
9 | abstract Optional<T> or(Optional<? extends T> secondChoice) Renvoie cette option si elle a une valeur présente; secondChoice sinon. |
dix | abstract T or(Supplier<? extends T> supplier) Renvoie l'instance contenue si elle est présente; supplier.get () sinon. |
11 | abstract T or(T defaultValue) Renvoie l'instance contenue si elle est présente; defaultValue sinon. |
12 | abstract T orNull() Renvoie l'instance contenue si elle est présente; nul sinon. |
13 | static <T> Iterable<T> presentInstances(Iterable<? extends Optional<? extends T>> optionals) Renvoie la valeur de chaque instance présente à partir des options fournies, dans l'ordre, en ignorant les occurrences d'absence (). |
14 | abstract String toString() Renvoie une représentation sous forme de chaîne pour cette instance. |
15 | abstract <V> Optional<V> transform(Function<? super T,V> function) Si l'instance est présente, elle est transformée avec la fonction donnée; sinon, absent () est renvoyé. |
Méthodes héritées
Cette classe hérite des méthodes de la classe suivante -
- java.lang.Object
Exemple de classe facultative
Créez le programme Java suivant en utilisant n'importe quel éditeur de votre choix dans say C:/> Guava.
GuavaTester.java
import com.google.common.base.Optional;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
Integer value1 = null;
Integer value2 = new Integer(10);
//Optional.fromNullable - allows passed parameter to be null.
Optional<Integer> a = Optional.fromNullable(value1);
//Optional.of - throws NullPointerException if passed parameter is null
Optional<Integer> b = Optional.of(value2);
System.out.println(guavaTester.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.or - returns the value if present otherwise returns
//the default value passed.
Integer value1 = a.or(new Integer(0));
//Optional.get - gets the value, value should be present
Integer value2 = b.get();
return value1 + value2;
}
}
Vérifiez le résultat
Compilez la classe en utilisant javac compilateur comme suit -
C:\Guava>javac GuavaTester.java
Exécutez maintenant le GuavaTester pour voir le résultat.
C:\Guava>java GuavaTester
Voyez le résultat.
First parameter is present: false
Second parameter is present: true
10
Les conditions préalables fournissent des méthodes statiques pour vérifier qu'une méthode ou un constructeur est appelé avec le paramètre approprié ou non. Il vérifie les pré-conditions. Ses méthodes lancent une exception IllegalArgumentException en cas d'échec.
Déclaration de classe
Voici la déclaration pour com.google.common.base.Preconditions classe -
@GwtCompatible
public final class Preconditions
extends Object
Méthodes de classe
Sr.Non | Méthode et description |
---|---|
1 | static void checkArgument(boolean expression) Garantit la véracité d'une expression impliquant un ou plusieurs paramètres de la méthode appelante. |
2 | static void checkArgument(boolean expression, Object errorMessage) Garantit la véracité d'une expression impliquant un ou plusieurs paramètres de la méthode appelante. |
3 | static void checkArgument(boolean expression, String errorMessageTemplate, Object. errorMessageArgs) Garantit la véracité d'une expression impliquant un ou plusieurs paramètres de la méthode appelante. |
4 | static int checkElementIndex(int index, int size) Garantit que l'index spécifie un élément valide dans un tableau, une liste ou une chaîne de taille. |
5 | static int checkElementIndex(int index, int size, String desc) Garantit que l'index spécifie un élément valide dans un tableau, une liste ou une chaîne de taille. |
6 | static <T> T checkNotNull(T reference) Garantit qu'une référence d'objet transmise en tant que paramètre à la méthode appelante n'est pas nulle. |
sept | static <T> T checkNotNull(T reference, Object errorMessage) Garantit qu'une référence d'objet transmise en tant que paramètre à la méthode appelante n'est pas nulle. |
8 | static <T> T checkNotNull(T reference, String errorMessageTemplate, Object... errorMessageArgs) Garantit qu'une référence d'objet transmise en tant que paramètre à la méthode appelante n'est pas nulle. |
9 | static int checkPositionIndex(int index, int size) Garantit que l'index spécifie une position valide dans un tableau, une liste ou une chaîne de taille. |
dix | static int checkPositionIndex(int index, int size, String desc) Garantit que l'index spécifie une position valide dans un tableau, une liste ou une chaîne de taille. |
11 | static void checkPositionIndexes(int start, int end, int size) S'assure que le début et la fin spécifient des positions valides dans un tableau, une liste ou une chaîne de taille et sont dans l'ordre. |
12 | static void checkState(boolean expression) Garantit la véracité d'une expression impliquant l'état de l'instance appelante, mais n'impliquant aucun paramètre de la méthode appelante. |
13 | static void checkState(boolean expression, Object errorMessage) Garantit la véracité d'une expression impliquant l'état de l'instance appelante, mais n'impliquant aucun paramètre de la méthode appelante. |
14 | static void checkState(boolean expression, String errorMessageTemplate, Object... errorMessageArgs) Garantit la véracité d'une expression impliquant l'état de l'instance appelante, mais n'impliquant aucun paramètre de la méthode appelante. |
Méthodes héritées
Cette classe hérite des méthodes de la classe suivante -
- java.lang.Object
Exemple de classe de conditions préalables
Créez le programme Java suivant en utilisant n'importe quel éditeur de votre choix dans say C:/> Guava.
GuavaTester.java
import com.google.common.base.Preconditions;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
try {
System.out.println(guavaTester.sqrt(-3.0));
} catch(IllegalArgumentException e) {
System.out.println(e.getMessage());
}
try {
System.out.println(guavaTester.sum(null,3));
} catch(NullPointerException e) {
System.out.println(e.getMessage());
}
try {
System.out.println(guavaTester.getValue(6));
} catch(IndexOutOfBoundsException e) {
System.out.println(e.getMessage());
}
}
public double sqrt(double input) throws IllegalArgumentException {
Preconditions.checkArgument(input > 0.0,
"Illegal Argument passed: Negative value %s.", input);
return Math.sqrt(input);
}
public int sum(Integer a, Integer b) {
a = Preconditions.checkNotNull(a, "Illegal Argument passed: First parameter is Null.");
b = Preconditions.checkNotNull(b, "Illegal Argument passed: Second parameter is Null.");
return a+b;
}
public int getValue(int input) {
int[] data = {1,2,3,4,5};
Preconditions.checkElementIndex(input,data.length, "Illegal Argument passed: Invalid index.");
return 0;
}
}
Vérifiez le résultat
Compilez la classe en utilisant javac compilateur comme suit -
C:\Guava>javac GuavaTester.java
Exécutez maintenant le GuavaTester pour voir le résultat.
C:\Guava>java GuavaTester
Voyez le résultat.
Illegal Argument passed: Negative value -3.0.
Illegal Argument passed: First parameter is Null.
Illegal Argument passed: Invalid index. (6) must be less than size (5)
La commande peut être considérée comme un comparateur enrichi avec une fonctionnalité de chaînage améliorée, plusieurs méthodes utilitaires, une capacité de tri multi-type, etc.
Déclaration de classe
Voici la déclaration pour com.google.common.collect.Ordering<T> classe -
@GwtCompatible
public abstract class Ordering<T>
extends Object
implements Comparator<T>
Méthodes de classe
Sr.Non | Méthode et description |
---|---|
1 | static Ordering<Object> allEqual() Renvoie un ordre qui traite toutes les valeurs comme égales, indiquant «aucun ordre». Le passage de cet ordre à n'importe quel algorithme de tri stable n'entraîne aucun changement dans l'ordre des éléments. |
2 | static Ordering<Object> arbitrary() Renvoie un ordre arbitraire sur tous les objets, pour lesquels compare (a, b) == 0 implique a == b (égalité d'identité). |
3 | int binarySearch(List<? extends T> sortedList, T key) Recherche sortedList pour la clé à l'aide de l'algorithme de recherche binaire. |
4 | abstract int compare(T left, T right) Compare ses deux arguments pour l'ordre. |
5 | <U extends T> Ordering<U> compound(Comparator<? super U> secondaryComparator) Retourne un ordre qui utilise d'abord l'ordre this, mais qui en cas de "cravate", délègue ensuite à secondaryComparator. |
6 | static <T> Ordering<T> compound(Iterable<? extends Comparator<? super T>> comparators) Renvoie un ordre qui essaie chaque comparateur donné dans l'ordre jusqu'à ce qu'un résultat différent de zéro soit trouvé, renvoyant ce résultat et ne renvoyant zéro que si tous les comparateurs retournent zéro. |
sept | static <T> Ordering<T> explicit(List<T> valuesInOrder) Renvoie un ordre qui compare les objets selon l'ordre dans lequel ils apparaissent dans la liste donnée. |
8 | static <T> Ordering<T> explicit(T leastValue, T... remainingValuesInOrder) Renvoie un ordre qui compare les objets selon l'ordre dans lequel ils sont donnés à cette méthode. |
9 | static <T> Ordering<T> from(Comparator<T> comparator) Renvoie un ordre basé sur une instance de comparateur existante. |
dix | <E extends T> List<E> greatestOf(Iterable<E> iterable, int k) Renvoie les k plus grands éléments de l'itérable donné selon cet ordre, du plus grand au moins. |
11 | <E extends T> List<E> greatestOf(Iterator<E> iterator, int k) Renvoie les k plus grands éléments de l'itérateur donné selon cet ordre, du plus grand au moins. |
12 | <E extends T> ImmutableList<E> immutableSortedCopy(Iterable<E> elements) Renvoie une liste immuable contenant des éléments triés par cet ordre. |
13 | boolean isOrdered(Iterable<? extends T> iterable) Renvoie true si chaque élément de l'itérable après le premier est supérieur ou égal à l'élément qui l'a précédé, selon cet ordre. |
14 | boolean isStrictlyOrdered(Iterable<? extends T> iterable) Renvoie true si chaque élément dans itérable après le premier est strictement supérieur à l'élément qui l'a précédé, selon cet ordre |
15 | <E extends T> List<E> leastOf(Iterable<E> iterable, int k) Renvoie les k moindres éléments de l'itérable donné selon cet ordre, du plus petit au plus grand. |
16 | <E extends T> List<E> leastOf(Iterator<E> elements, int k) Renvoie les k moindres éléments de l'itérateur donné selon cet ordre, du plus petit au plus grand. |
17 | <S extends T> Ordering<Iterable<S>> lexicographical() Renvoie un nouvel ordre qui trie les itérables en comparant les éléments correspondants par paires jusqu'à ce qu'un résultat différent de zéro soit trouvé; impose "l'ordre du dictionnaire". |
18 | <E extends T> E max(E a, E b) Renvoie la plus grande des deux valeurs selon cet ordre. |
19 | <E extends T> E max(E a, E b, E c, E... rest) Renvoie la plus grande des valeurs spécifiées selon cet ordre. |
20 | <E extends T> E max(Iterable<E> iterable) Renvoie la plus grande des valeurs spécifiées selon cet ordre. |
21 | <E extends T> E max(Iterator<E> iterator) Renvoie la plus grande des valeurs spécifiées selon cet ordre. |
22 | <E extends T> E min(E a, E b) Renvoie la plus petite des deux valeurs selon cet ordre. |
23 | <E extends T> E min(E a, E b, E c, E... rest) Renvoie la plus petite des valeurs spécifiées selon cet ordre. |
24 | <E extends T> E min(Iterable<E> iterable) Renvoie la plus petite des valeurs spécifiées selon cet ordre. |
25 | <E extends T> E min(Iterator<E> iterator) Renvoie la plus petite des valeurs spécifiées selon cet ordre. |
26 | static <C extends Comparable> Ordering<C> natural() Renvoie un ordre sérialisable qui utilise l'ordre naturel des valeurs. |
27 | <S extends T> Ordering<S> nullsFirst() Renvoie un ordre qui traite null comme inférieur à toutes les autres valeurs et l'utilise pour comparer les valeurs non nulles. |
28 | <S extends T> Ordering<S> nullsLast() Renvoie un ordre qui traite null comme supérieur à toutes les autres valeurs et utilise cet ordre pour comparer les valeurs non nulles. |
29 | <F> Ordering<F> onResultOf(Function<F,? extends T> function) Renvoie un nouvel ordre sur F qui ordonne les éléments en leur appliquant d'abord une fonction, puis en comparant ces résultats à l'aide de this. |
30 | <S extends T> Ordering<S> reverse() Renvoie l'inverse de cet ordre; l'ordre équivalent à Collections.reverseOrder (comparateur). |
31 | <E extends T> List<E> sortedCopy(Iterable<E> elements) Renvoie une liste modifiable contenant des éléments triés par cet ordre; utilisez ceci uniquement lorsque la liste résultante peut nécessiter des modifications supplémentaires ou peut contenir null. |
32 | static Ordering<Object> usingToString() Renvoie un ordre qui compare les objets par l'ordre naturel de leurs représentations sous forme de chaîne tel que renvoyé par toString (). |
Méthodes héritées
Cette classe hérite des méthodes de la classe suivante -
- java.lang.Object
Exemple de classe de commande
Créez le programme Java suivant en utilisant n'importe quel éditeur de votre choix dans say C:/> Guava.
GuavaTester.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.google.common.collect.Ordering;
public class GuavaTester {
public static void main(String args[]) {
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(new Integer(5));
numbers.add(new Integer(2));
numbers.add(new Integer(15));
numbers.add(new Integer(51));
numbers.add(new Integer(53));
numbers.add(new Integer(35));
numbers.add(new Integer(45));
numbers.add(new Integer(32));
numbers.add(new Integer(43));
numbers.add(new Integer(16));
Ordering ordering = Ordering.natural();
System.out.println("Input List: ");
System.out.println(numbers);
Collections.sort(numbers,ordering );
System.out.println("Sorted List: ");
System.out.println(numbers);
System.out.println("======================");
System.out.println("List is sorted: " + ordering.isOrdered(numbers));
System.out.println("Minimum: " + ordering.min(numbers));
System.out.println("Maximum: " + ordering.max(numbers));
Collections.sort(numbers,ordering.reverse());
System.out.println("Reverse: " + numbers);
numbers.add(null);
System.out.println("Null added to Sorted List: ");
System.out.println(numbers);
Collections.sort(numbers,ordering.nullsFirst());
System.out.println("Null first Sorted List: ");
System.out.println(numbers);
System.out.println("======================");
List<String> names = new ArrayList<String>();
names.add("Ram");
names.add("Shyam");
names.add("Mohan");
names.add("Sohan");
names.add("Ramesh");
names.add("Suresh");
names.add("Naresh");
names.add("Mahesh");
names.add(null);
names.add("Vikas");
names.add("Deepak");
System.out.println("Another List: ");
System.out.println(names);
Collections.sort(names,ordering.nullsFirst().reverse());
System.out.println("Null first then reverse sorted list: ");
System.out.println(names);
}
}
Vérifiez le résultat
Compilez la classe en utilisant javac compilateur comme suit -
C:\Guava>javac GuavaTester.java
Exécutez maintenant le GuavaTester pour voir le résultat.
C:\Guava>java GuavaTester
Voyez le résultat.
Input List:
[5, 2, 15, 51, 53, 35, 45, 32, 43, 16]
Sorted List:
[2, 5, 15, 16, 32, 35, 43, 45, 51, 53]
======================
List is sorted: true
Minimum: 2
Maximum: 53
Reverse: [53, 51, 45, 43, 35, 32, 16, 15, 5, 2]
Null added to Sorted List:
[53, 51, 45, 43, 35, 32, 16, 15, 5, 2, null]
Null first Sorted List:
[null, 2, 5, 15, 16, 32, 35, 43, 45, 51, 53]
======================
Another List:
[Ram, Shyam, Mohan, Sohan, Ramesh, Suresh, Naresh, Mahesh, null, Vikas, Deepak]
Null first then reverse sorted list:
[Vikas, Suresh, Sohan, Shyam, Ramesh, Ram, Naresh, Mohan, Mahesh, Deepak, null]
La classe Objects fournit des fonctions d'assistance applicables à tous les objets tels que equals, hashCode, etc.
Déclaration de classe
Voici la déclaration pour com.google.common.base.Objects classe -
@GwtCompatible
public final class Objects
extends Object
Méthodes de classe
Sr.Non | Méthode et description |
---|---|
1 | static boolean equal(Object a, Object b) Détermine si deux objets éventuellement nuls sont égaux. |
2 | static <T> T firstNonNull(T first, T second) Obsolète. Utilisez plutôt MoreObjects.firstNonNull (T, T). Cette méthode devrait être supprimée en juin 2016. |
3 | static int hashCode(Object... objects) Génère un code de hachage pour plusieurs valeurs. |
4 | static Objects.ToStringHelper toStringHelper(Class<?> clazz) Obsolète. Utilisez plutôt MoreObjects.toStringHelper (Class). Cette méthode devrait être supprimée en juin 2016 |
5 | static Objects.ToStringHelper toStringHelper(Object self) Obsolète. Utilisez plutôt MoreObjects.toStringHelper (Object). Cette méthode devrait être supprimée en juin 2016. |
6 | static Objects.ToStringHelper toStringHelper(String className) Obsolète. Utilisez plutôt MoreObjects.toStringHelper (String). Cette méthode devrait être supprimée en juin 2016. |
Méthodes héritées
Cette classe hérite des méthodes de la classe suivante -
- java.lang.Object
Exemple de classe d'objets
Créez le programme Java suivant en utilisant n'importe quel éditeur de votre choix dans say C:/> Guava.
GuavaTester.java
import com.google.common.base.Objects;
public class GuavaTester {
public static void main(String args[]) {
Student s1 = new Student("Mahesh", "Parashar", 1, "VI");
Student s2 = new Student("Suresh", null, 3, null);
System.out.println(s1.equals(s2));
System.out.println(s1.hashCode());
System.out.println(
Objects.toStringHelper(s1)
.add("Name",s1.getFirstName()+" " + s1.getLastName())
.add("Class", s1.getClassName())
.add("Roll No", s1.getRollNo())
.toString());
}
}
class Student {
private String firstName;
private String lastName;
private int rollNo;
private String className;
public Student(String firstName, String lastName, int rollNo, String className) {
this.firstName = firstName;
this.lastName = lastName;
this.rollNo = rollNo;
this.className = className;
}
@Override
public boolean equals(Object object) {
if(!(object instanceof Student) || object == null) {
return false;
}
Student student = (Student)object;
// no need to handle null here
// Objects.equal("test", "test") == true
// Objects.equal("test", null) == false
// Objects.equal(null, "test") == false
// Objects.equal(null, null) == true
return Objects.equal(firstName, student.firstName) // first name can be null
&& Objects.equal(lastName, student.lastName) // last name can be null
&& Objects.equal(rollNo, student.rollNo)
&& Objects.equal(className, student.className); // class name can be null
}
@Override
public int hashCode() {
//no need to compute hashCode by self
return Objects.hashCode(className,rollNo);
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
Vérifiez le résultat
Compilez la classe en utilisant javac compilateur comme suit -
C:\Guava>javac GuavaTester.java
Exécutez maintenant le GuavaTester pour voir le résultat.
C:\Guava>java GuavaTester
Voyez le résultat.
false
85871
Student{Name=Mahesh Parashar, Class=VI, Roll No=1}
La plage représente un intervalle ou une séquence. Il est utilisé pour obtenir un ensemble de nombres / chaînes se trouvant dans une plage particulière.
Déclaration de classe
Voici la déclaration pour com.google.common.collect.Range<C> classe -
@GwtCompatible
public final class Range<C extends Comparable>
extends Object
implements Predicate<C>, Serializable
Méthodes
Sr.Non | Méthode et description |
---|---|
1 | static <C extends Comparable<?>> Range<C> all() Renvoie une plage qui contient toutes les valeurs de type C. |
2 | boolean apply(C input)Deprecated. Fourni uniquement pour satisfaire l'interface du prédicat; utilisez contient (C) à la place. |
3 | static <C extends Comparable<?>> Range<C> atLeast(C endpoint) Renvoie une plage qui contient toutes les valeurs supérieures ou égales au point de terminaison. |
4 | static <C extends Comparable<?>> Range<C> atMost(C endpoint) Renvoie une plage qui contient toutes les valeurs inférieures ou égales au point de terminaison. |
5 | Range<C> canonical(DiscreteDomain<C> domain) Renvoie la forme canonique de cette plage dans le domaine donné. |
6 | static <C extends Comparable<?>> Range<C> closed(C lower, C upper) Renvoie une plage qui contient toutes les valeurs supérieures ou égales à inférieur et inférieur ou égal à supérieur. |
sept | static <C extends Comparable<?>> Range<C> closedOpen(C lower, C upper) Renvoie une plage qui contient toutes les valeurs supérieures ou égales à inférieure et strictement inférieure à supérieure. |
8 | boolean contains(C value) Renvoie true si la valeur se situe dans les limites de cette plage. |
9 | boolean containsAll(Iterable<? extends C> values) Renvoie true si chaque élément des valeurs est contenu dans cette plage. |
dix | static <C extends Comparable<?>> Range<C> downTo(C endpoint, BoundType boundType) Renvoie une plage à partir du point de terminaison donné, qui peut être inclusive (fermée) ou exclusive (ouverte), sans limite supérieure. |
11 | static <C extends Comparable<?>> Range<C> encloseAll(Iterable<C> values) Renvoie la plage minimale qui contient toutes les valeurs données. |
12 | boolean encloses(Range<C> other) Renvoie true si les limites des autres ne s'étendent pas en dehors des limites de cette plage. |
13 | boolean equals(Object object) Renvoie true si l'objet est une plage ayant les mêmes points de terminaison et les mêmes types liés que cette plage. |
14 | static <C extends Comparable<?>> Range<C> greaterThan(C endpoint) Renvoie une plage qui contient toutes les valeurs strictement supérieures au point de terminaison. |
15 | int hashCode() Renvoie un code de hachage pour cette plage. |
16 | boolean hasLowerBound() Renvoie true si cette plage a un point de terminaison inférieur. |
17 | boolean hasUpperBound() Renvoie true si cette plage a un point de terminaison supérieur. |
18 | Range<C> intersection(Range<C> connectedRange) Renvoie la plage maximale comprise à la fois par cette plage et par connectedRange, si une telle plage existe. |
19 | boolean isConnected(Range<C> other) Renvoie true s'il existe une plage (éventuellement vide) qui est entourée à la fois par cette plage et par d'autres. |
20 | boolean isEmpty() Renvoie vrai si cette plage est de la forme [v..v) ou (v..v]. |
21 | static <C extends Comparable<?>> Range<C> lessThan(C endpoint) Renvoie une plage qui contient toutes les valeurs strictement inférieures au point de terminaison. |
22 | BoundType lowerBoundType() Renvoie le type de la limite inférieure de cette plage: BoundType.CLOSED si la plage inclut son point de terminaison inférieur, BoundType.OPEN si ce n'est pas le cas. |
23 | C lowerEndpoint() Renvoie le point de terminaison inférieur de cette plage. |
24 | static <C extends Comparable<?>> Range<C> open(C lower, C upper) Renvoie une plage qui contient toutes les valeurs strictement supérieures à inférieures et strictement inférieures à supérieures. |
25 | static <C extends Comparable<?>> Range<C> openClosed(C lower, C upper) Renvoie une plage qui contient toutes les valeurs strictement supérieures à inférieures et inférieures ou égales à supérieures. |
26 | static <C extends Comparable<?>> Range<C> range(C lower, BoundType lowerType, C upper, BoundType upperType) Renvoie une plage qui contient n'importe quelle valeur de inférieure à supérieure, où chaque point de terminaison peut être inclusif (fermé) ou exclusif (ouvert). |
27 | static <C extends Comparable<?>> Range<C> singleton(C value) Renvoie une plage qui contient uniquement la valeur donnée. |
28 | Range<C> span(Range<C> other) Renvoie la plage minimale qui englobe à la fois cette plage et autre. |
29 | String toString() Renvoie une représentation sous forme de chaîne de cette plage, telle que "[3..5)" (d'autres exemples sont répertoriés dans la documentation de la classe). |
30 | BoundType upperBoundType() Renvoie le type de la limite supérieure de cette plage: BoundType.CLOSED si la plage inclut son extrémité supérieure, BoundType.OPEN si ce n'est pas le cas. |
31 | C upperEndpoint() Renvoie l'extrémité supérieure de cette plage. |
32 | static <C extends Comparable<?>> Range<C> upTo(C endpoint, BoundType boundType) Renvoie une plage sans limite inférieure jusqu'au point de terminaison donné, qui peut être inclusive (fermée) ou exclusive (ouverte). |
Méthodes héritées
Cette classe hérite des méthodes de la classe suivante -
- java.lang.Object
Exemple de classe de plage
Créez le programme Java suivant en utilisant n'importe quel éditeur de votre choix dans say C:/> Guava.
GuavaTester.java
import com.google.common.collect.ContiguousSet;
import com.google.common.collect.DiscreteDomain;
import com.google.common.collect.Range;
import com.google.common.primitives.Ints;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester tester = new GuavaTester();
tester.testRange();
}
private void testRange() {
//create a range [a,b] = { x | a <= x <= b}
Range<Integer> range1 = Range.closed(0, 9);
System.out.print("[0,9] : ");
printRange(range1);
System.out.println("5 is present: " + range1.contains(5));
System.out.println("(1,2,3) is present: " + range1.containsAll(Ints.asList(1, 2, 3)));
System.out.println("Lower Bound: " + range1.lowerEndpoint());
System.out.println("Upper Bound: " + range1.upperEndpoint());
//create a range (a,b) = { x | a < x < b}
Range<Integer> range2 = Range.open(0, 9);
System.out.print("(0,9) : ");
printRange(range2);
//create a range (a,b] = { x | a < x <= b}
Range<Integer> range3 = Range.openClosed(0, 9);
System.out.print("(0,9] : ");
printRange(range3);
//create a range [a,b) = { x | a <= x < b}
Range<Integer> range4 = Range.closedOpen(0, 9);
System.out.print("[0,9) : ");
printRange(range4);
//create an open ended range (9, infinity
Range<Integer> range5 = Range.greaterThan(9);
System.out.println("(9,infinity) : ");
System.out.println("Lower Bound: " + range5.lowerEndpoint());
System.out.println("Upper Bound present: " + range5.hasUpperBound());
Range<Integer> range6 = Range.closed(3, 5);
printRange(range6);
//check a subrange [3,5] in [0,9]
System.out.println("[0,9] encloses [3,5]:" + range1.encloses(range6));
Range<Integer> range7 = Range.closed(9, 20);
printRange(range7);
//check ranges to be connected
System.out.println("[0,9] is connected [9,20]:" + range1.isConnected(range7));
Range<Integer> range8 = Range.closed(5, 15);
//intersection
printRange(range1.intersection(range8));
//span
printRange(range1.span(range8));
}
private void printRange(Range<Integer> range) {
System.out.print("[ ");
for(int grade : ContiguousSet.create(range, DiscreteDomain.integers())) {
System.out.print(grade +" ");
}
System.out.println("]");
}
}
Vérifiez le résultat
Compilez la classe en utilisant javac compilateur comme suit -
C:\Guava>javac GuavaTester.java
Exécutez maintenant le GuavaTester pour voir le résultat.
C:\Guava>java GuavaTester
Voyez le résultat.
[0,9] : [ 0 1 2 3 4 5 6 7 8 9 ]
5 is present: true
(1,2,3) is present: true
Lower Bound: 0
Upper Bound: 9
(0,9) : [ 1 2 3 4 5 6 7 8 ]
(0,9] : [ 1 2 3 4 5 6 7 8 9 ]
[0,9) : [ 0 1 2 3 4 5 6 7 8 ]
(9,infinity) :
Lower Bound: 9
Upper Bound present: false
[ 3 4 5 ]
[0,9] encloses [3,5]:true
[ 9 10 11 12 13 14 15 16 17 18 19 20 ]
[0,9] is connected [9,20]:true
[ 5 6 7 8 9 ]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ]
La classe Throwables fournit des méthodes utilitaires liées à l'interface Throwable.
Déclaration de classe
Voici la déclaration pour com.google.common.base.Throwables classe -
public final class Throwables
extends Object
Méthodes de classe
Sr.Non | Méthode et description |
---|---|
1 | static List<Throwable> getCausalChain(Throwable throwable) Obtient une chaîne de causes Throwable sous forme de liste. |
2 | static Throwable getRootCause(Throwable throwable) Renvoie la cause la plus profonde de jetable. |
3 | static String getStackTraceAsString(Throwable throwable) Renvoie une chaîne contenant le résultat de toString (), suivi de la trace de pile complète et récursive de throwable. |
4 | static RuntimeException propagate(Throwable throwable) Propage jetable tel quel s'il s'agit d'une instance de RuntimeException ou Error, ou bien en dernier recours, l'encapsule dans une RuntimeException puis se propage. |
5 | static <X extends Throwable> void propagateIfInstanceOf(Throwable throwable, Class<X> declaredType) Propage le jetable exactement tel quel, si et seulement s'il s'agit d'une instance de declareType. |
6 | static void propagateIfPossible(Throwable throwable) Propage le jetable exactement tel quel, si et seulement s'il s'agit d'une instance de RuntimeException ou Error. |
sept | static <X extends Throwable> void propagateIfPossible(Throwable throwable, Class<X> declaredType) Propage le jetable exactement tel quel, si et seulement s'il s'agit d'une instance de RuntimeException, Error ou declareType. |
8 | static <X1 extends Throwable,X2 extends Throwable>void propagateIfPossible(Throwable throwable, Class<X1> declaredType1, Class<X2> declaredType2) Propage le jetable exactement tel quel, si et seulement s'il s'agit d'une instance de RuntimeException, Error, declareType1 ou declareType2. |
Méthodes héritées
Cette classe hérite des méthodes de la classe suivante -
- java.lang.Object
Exemple de classe Throwables
Créez le programme Java suivant en utilisant n'importe quel éditeur de votre choix dans say C:/> Guava.
GuavaTester.java
import java.io.IOException;
import com.google.common.base.Objects;
import com.google.common.base.Throwables;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester tester = new GuavaTester();
try {
tester.showcaseThrowables();
} catch (InvalidInputException e) {
//get the root cause
System.out.println(Throwables.getRootCause(e));
} catch (Exception e) {
//get the stack trace in string format
System.out.println(Throwables.getStackTraceAsString(e));
}
try {
tester.showcaseThrowables1();
} catch (Exception e) {
System.out.println(Throwables.getStackTraceAsString(e));
}
}
public void showcaseThrowables() throws InvalidInputException {
try {
sqrt(-3.0);
} catch (Throwable e) {
//check the type of exception and throw it
Throwables.propagateIfInstanceOf(e, InvalidInputException.class);
Throwables.propagate(e);
}
}
public void showcaseThrowables1() {
try {
int[] data = {1,2,3};
getValue(data, 4);
} catch (Throwable e) {
Throwables.propagateIfInstanceOf(e, IndexOutOfBoundsException.class);
Throwables.propagate(e);
}
}
public double sqrt(double input) throws InvalidInputException {
if(input < 0) throw new InvalidInputException();
return Math.sqrt(input);
}
public double getValue(int[] list, int index) throws IndexOutOfBoundsException {
return list[index];
}
public void dummyIO() throws IOException {
throw new IOException();
}
}
class InvalidInputException extends Exception {
}
Vérifiez le résultat
Compilez la classe en utilisant javac compilateur comme suit -
C:\Guava>javac GuavaTester.java
Exécutez maintenant le GuavaTester pour voir le résultat.
C:\Guava>java GuavaTester
Voyez le résultat.
InvalidInputException
java.lang.ArrayIndexOutOfBoundsException: 4
at GuavaTester.getValue(GuavaTester.java:52)
at GuavaTester.showcaseThrowables1(GuavaTester.java:38)
at GuavaTester.main(GuavaTester.java:19)
Guava présente de nombreuses collections avancées basées sur l'expérience des développeurs dans les travaux de développement d'applications. Ci-dessous une liste de collections utiles -
Sr.Non | Nom et description de la collection |
---|---|
1 | Multiset Une extension de l'interface Set pour permettre la duplication d'éléments. |
2 | Multimap Une extension de l'interface de carte afin que ses clés puissent être mappées à plusieurs valeurs à la fois. |
3 | BiMap Une extension de l'interface Map pour prendre en charge les opérations inverses. |
4 | Table Table représente une carte spéciale dans laquelle deux clés peuvent être spécifiées de manière combinée pour faire référence à une seule valeur. |
Guava fournit un mécanisme de mise en cache basé sur la mémoire très puissant par une interface LoadingCache <K, V>. Les valeurs sont automatiquement chargées dans le cache et il fournit de nombreuses méthodes utilitaires utiles pour les besoins de mise en cache.
Déclaration d'interface
Voici la déclaration pour com.google.common.cache.LoadingCache<K,V> interface -
@Beta
@GwtCompatible
public interface LoadingCache<K,V>
extends Cache<K,V>, Function<K,V>
Méthodes d'interface
Sr.Non | Méthode et description |
---|---|
1 | V apply(K key) Obsolète. Fourni pour satisfaire l'interface de fonction; utilisez plutôt get (K) ou getUnchecked (K). |
2 | ConcurrentMap<K,V> asMap() Renvoie une vue des entrées stockées dans ce cache sous la forme d'une carte thread-safe. |
3 | V get(K key) Renvoie la valeur associée à la clé dans ce cache, en chargeant d'abord cette valeur si nécessaire. |
4 | ImmutableMap<K,V> getAll(Iterable<? extends K> keys) Renvoie une carte des valeurs associées aux clés, en créant ou en récupérant ces valeurs si nécessaire. |
5 | V getUnchecked(K key) Renvoie la valeur associée à la clé dans ce cache, en chargeant d'abord cette valeur si nécessaire. |
6 | void refresh(K key) Charge une nouvelle valeur pour la clé, éventuellement de manière asynchrone. |
Exemple de LoadingCache
Créez le programme Java suivant en utilisant n'importe quel éditeur de votre choix dans say C:/> Guava.
GuavaTester.java
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import com.google.common.base.MoreObjects;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
public class GuavaTester {
public static void main(String args[]) {
//create a cache for employees based on their employee id
LoadingCache<String, Employee> employeeCache =
CacheBuilder.newBuilder()
.maximumSize(100) // maximum 100 records can be cached
.expireAfterAccess(30, TimeUnit.MINUTES) // cache will expire after 30 minutes of access
.build(new CacheLoader<String, Employee>() { // build the cacheloader
@Override
public Employee load(String empId) throws Exception {
//make the expensive call
return getFromDatabase(empId);
}
});
try {
//on first invocation, cache will be populated with corresponding
//employee record
System.out.println("Invocation #1");
System.out.println(employeeCache.get("100"));
System.out.println(employeeCache.get("103"));
System.out.println(employeeCache.get("110"));
//second invocation, data will be returned from cache
System.out.println("Invocation #2");
System.out.println(employeeCache.get("100"));
System.out.println(employeeCache.get("103"));
System.out.println(employeeCache.get("110"));
} catch (ExecutionException e) {
e.printStackTrace();
}
}
private static Employee getFromDatabase(String empId) {
Employee e1 = new Employee("Mahesh", "Finance", "100");
Employee e2 = new Employee("Rohan", "IT", "103");
Employee e3 = new Employee("Sohan", "Admin", "110");
Map<String, Employee> database = new HashMap<String, Employee>();
database.put("100", e1);
database.put("103", e2);
database.put("110", e3);
System.out.println("Database hit for" + empId);
return database.get(empId);
}
}
class Employee {
String name;
String dept;
String emplD;
public Employee(String name, String dept, String empID) {
this.name = name;
this.dept = dept;
this.emplD = empID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public String getEmplD() {
return emplD;
}
public void setEmplD(String emplD) {
this.emplD = emplD;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(Employee.class)
.add("Name", name)
.add("Department", dept)
.add("Emp Id", emplD).toString();
}
}
Vérifiez le résultat
Compilez la classe en utilisant javac compilateur comme suit -
C:\Guava>javac GuavaTester.java
Exécutez maintenant le GuavaTester pour voir le résultat.
C:\Guava>java GuavaTester
Voyez le résultat.
Invocation #1
Database hit for100
Employee{Name=Mahesh, Department=Finance, Emp Id=100}
Database hit for103
Employee{Name=Rohan, Department=IT, Emp Id=103}
Database hit for110
Employee{Name=Sohan, Department=Admin, Emp Id=110}
Invocation #2
Employee{Name=Mahesh, Department=Finance, Emp Id=100}
Employee{Name=Rohan, Department=IT, Emp Id=103}
Employee{Name=Sohan, Department=Admin, Emp Id=110}
Guava présente de nombreux utilitaires de chaîne avancés basés sur l'expérience des développeurs dans les travaux de développement d'applications. Voici la liste des utilitaires utiles basés sur des chaînes -
Sr.Non | Nom et description de l'utilitaire |
---|---|
1 | Menuisier Utilitaire pour joindre des objets, des chaînes, etc. |
2 | Splitter Utilitaire pour diviser la chaîne. |
3 | CharMatcher Utilitaire pour les opérations de caractères. |
4 | CaseFormat Utilitaire pour changer les formats de chaînes. |
Comme les types primitifs de Java ne peuvent pas être utilisés pour passer des génériques ou des collections en entrée, Guava a fourni de nombreuses classes Wrapper Utilities pour gérer les types primitifs en tant qu'objets. Voici la liste des utilitaires de traitement primitifs utiles -
Sr.Non | Nom et description de l'utilitaire |
---|---|
1 | Octets Utilitaire pour l'octet primitif. |
2 | Short Utilité pour le court primitif. |
3 | Ints Utilitaire pour int primitif. |
4 | Longs Utilité pour longtemps primitive. |
5 | Flotteurs Utilitaire pour flotteur primitif. |
6 | Double Utilitaire pour double primitif. |
sept | Caractères Utilitaire pour le caractère primitif. |
8 | Booléens Utilitaire pour booléen primitif. |
Guava fournit des classes d'utilitaires liées aux mathématiques pour gérer int, long et BigInteger. Voici la liste des utilitaires utiles -
Sr.Non | Nom et description de l'utilitaire |
---|---|
1 | IntMath Utilitaire mathématique pour int. |
2 | LongMath Utilitaire mathématique pour longtemps. |
3 | BigIntegerMath Utilitaire mathématique pour BigInteger. |