Utilisation de paires en Java

1. Vue d'ensemble

Dans cet article rapide, nous discutons du concept de programmation très utile connu sous le nom de paire . Les paires fournissent un moyen pratique de gérer une simple association clé-valeur et sont particulièrement utiles lorsque nous voulons renvoyer deux valeurs à partir d'une méthode.

Une implémentation simple d'une paire est disponible dans les bibliothèques Java principales. Au-delà de cela, certaines bibliothèques tierces telles que Apache Commons et Vavr ont exposé cette fonctionnalité dans leurs API respectives.

2. Implémentation Java de base

2.1. La classe Pair

La classe Pair se trouve dans le package javafx.util . Le constructeur de cette classe prend deux arguments, une clé et sa valeur correspondante:

Pair pair = new Pair(1, "One"); Integer key = pair.getKey(); String value = pair.getValue(); 

Cet exemple illustre un simple mappage entier à chaîne à l'aide du concept Pair.

Comme indiqué, la clé de l' objet paire est récupérée en appelant une méthode getKey () tandis que la valeur est récupérée en appelant getValue ().

2.2. AbstractMap.SimpleEntry et AbstractMap.SimpleImmutableEntry

SimpleEntry est défini comme une classe imbriquée dans la classe AbstractMap . Pour créer un objet de ce type, nous pouvons fournir une clé et une valeur au constructeur:

AbstractMap.SimpleEntry entry = new AbstractMap.SimpleEntry(1, "one"); Integer key = entry.getKey(); String value = entry.getValue();

La clé et la valeur sont accessibles via les méthodes standard getter et setter.

En outre, la classe AbstractMap contient également une classe imbriquée qui représente une paire immuable: la classe SimpleImmutableEntry :

AbstractMap.SimpleImmutableEntry entry = new AbstractMap.SimpleImmutableEntry(1, "one");

Cela fonctionne de la même manière que la classe de paires mutables, sauf que la valeur de la paire ne peut pas être modifiée. Tenter de le faire entraînera une exception UnsupportedOperationException .

3. Apache Commons

Dans la bibliothèque Apache Commons, nous pouvons trouver la classe Pair dans le package org.apache.commons.lang3.tuple . Il s'agit d'une classe abstraite, elle ne peut donc pas être instanciée directement.

Nous pouvons trouver ici, deux sous-classes - représentant des paires immuables et mutables: Imm utablePair et MutablePair.

Les deux implémentations ont accès aux méthodes de lecture / définition clé / valeur:

ImmutablePair pair = new ImmutablePair(2, "Two"); Integer key = pair.getKey(); String value = pair.getValue();

Sans surprise, une tentative d' appel de setValue () sur ImmutablePair entraîne une exception UnsupportedOperationException .

Mais l'opération est entièrement valable pour une implémentation mutable:

Pair pair = new MutablePair(3, "Three"); pair.setValue("New Three"); 

4. Vavr

Dans la bibliothèque Vavr, la fonctionnalité de paire est fournie par la classe immuable Tuple2 :

Tuple2 pair = new Tuple2(4, "Four"); Integer key = pair._1(); String value = pair._2(); 

Dans cette implémentation, nous ne pouvons pas modifier l'objet après la création, donc les méthodes de mutation retournent une nouvelle instance qui inclut la modification fournie:

tuplePair = pair.update2("New Four"); 

5. Alternative I - Classe de conteneur simple

Soit par préférence de l'utilisateur ou en l'absence de l'une des bibliothèques susmentionnées, une solution de contournement standard pour la fonctionnalité de paire consiste à créer une classe de conteneur simple qui encapsule les valeurs de retour souhaitées.

Le plus grand avantage ici est la possibilité de fournir notre nom, ce qui permet d'éviter d'avoir la même classe représentant différents objets de domaine:

public class CustomPair { private String key; private String value; // standard getters and setters }

6. Alternative II - Tableaux

Une autre solution de contournement courante consiste à utiliser un tableau simple avec deux éléments pour obtenir des résultats similaires:

private Object[] getPair() { // ... return new Object[] {key, value}; }

En règle générale, la clé est située à l'index zéro du tableau tandis que sa valeur correspondante est située à l'index un.

7. Conclusion

Dans ce didacticiel, nous avons discuté du concept de paires en Java et des différentes implémentations disponibles dans le noyau Java ainsi que dans d'autres bibliothèques tierces.

Comme toujours, vous pouvez trouver le code soutenant ce didacticiel sur GitHub.