Une note quand vous voulez Tuple en Java

Java intègre également des fonctionnalités relativement modernes telles que les expressions lambda et l'API Stream, et il existe de plus en plus de cas où vous souhaitez renvoyer le résultat du traitement sous la forme de deux valeurs ou plus. Une façon de faire est d'utiliser Tuple, qui est souvent disponible dans d'autres langues. Cependant, Java n'a pas Tuple comme API standard, c'est donc un mémo lorsque j'ai un peu étudié.

Qu'est-ce que Tuple

Tuple

Un tuple est un ensemble d'éléments ordonnés. À l'origine un concept mathématique, certains langages de programmation fournissent un type de données appelé Taple.
Les spécifications du type taple diffèrent selon la langue, mais il peut stocker plusieurs types différents de données et d'objets, et un numéro de série (indice) est attribué à chaque élément comme un tableau, qui représente une structure de données qui identifie l'élément. Souvent. Dans un langage fonctionnel tel que LISP, un type de données qui a une structure dichotomisée est appelé un taple.

Ceci est une citation d'e-Words, et bien que cela dépende du langage et de l'implémentation, Tuple est ici une structure de données pour regrouper n'importe quel nombre d'éléments et de types.

Pourquoi il n'y a pas de Tuple dans l'API standard

Does Java SE 8 have Pairs or Tuples? Les réponses des développeurs Java et OpenJDK d'Oracle seront utiles. (Extrait partiel et super résumé)

Java SE a suggéré d'avoir une classe Pair (Tuple) et a été rejeté au moins une fois. Cependant, je comprends la nécessité de plusieurs implémentations dans d'autres bibliothèques et applications. Cependant, si vous fournissez une structure telle que Pair en tant qu'API standard, vous souhaiterez représenter des structures de données complexes avec des paires et des collections sans utiliser d'abstractions (classes). (Pair <List <String>, List <Pair <String, List <Boolean >>>>, Map <Double, List <Pair <QueryTuple, Map <StatType, Number >>>>)
En outre, les problèmes de convention de dénomination et les environnements tels que l'API Stream nécessitent des paires en combinaison avec des primitives ainsi que des paires pour les objets. (ʻObjIntPair, ʻObjLongPair, ʻObjDoublePair, ʻIntObjPair, ʻIntIntPair` ...)

Bien qu'il existe une possibilité de mise en œuvre dans le futur, il semble que la situation actuelle est qu'il n'a pas été décidé de l'ajouter en tant qu'API standard.

Ainsi, bien que d'autres paradigmes soient inclus, lorsque vous voulez Tuple dans le langage orienté objet Java, il semble que la direction actuelle soit de faire une abstraction (classe) appropriée.

Utilisez la bibliothèque

Même s'il s'agit d'une politique Java, vous le souhaitez parfois. Vous pouvez également utiliser javafx.util.Pair, mais le package est javafx ou seul Pair est préparé. Je ne pense pas qu'il soit possible d'utiliser une bibliothèque externe.

Dans de nombreux cas, il est fourni par une bibliothèque relativement orientée fonction.

Il est important de noter que certaines bibliothèques ont des tuples qui sont également mutables et immuables. En particulier, il convient de noter que les propriétés immuables ne peuvent pas être utilisées avec les API qui supposent des propriétés mutables telles que l'accumulateur de collecteur. De plus, en fonction de la bibliothèque, des classes autres que Tuple seront ajoutées, donc si vous l'introduisez facilement, la gestion peut devenir compliquée. * 1

Mettre en place

Bien que l'ajout avec une bibliothèque soit facile, il y a aussi des problèmes * 1, donc s'il s'agit d'un simple Tuple qui ne nécessite pas de fonctionnalité, il existe également une méthode pour l'implémenter facilement avec Lombok ou similaire.

@Data(staticConstructor = "of")
public class Pair<A, B> {
    private final A left;
    private final B right;
}

Résumé

Donc, si vous voulez Tuple en Java,

  1. Déterminez s'il peut être exprimé dans une classe, etc.
  2. Si vous voulez la fonctionnalité minimale, utilisez votre propre Tuple à la place.
  3. Envisagez une bibliothèque pour une utilisation à grande échelle

Cela semble bon de penser cela.

Recommended Posts

Une note quand vous voulez Tuple en Java
Lorsque vous souhaitez remplacer dynamiquement l'annotation dans Java 8
Lors de la recherche de plusieurs dans un tableau Java
Lorsque vous souhaitez lier InputStream dans JDBI3
[Swift] Utilisez nonzeroBitCount lorsque vous voulez popcnt dans Swift
Remarque sur l'initialisation des champs dans le didacticiel Java
Ce que j'ai appris lors de la création d'un serveur en Java
Remarques sur Java GC
Rechercher un sous-ensemble en Java
Une note lors de l'examen de Javalin
Vous n'avez pas besoin d'écrire deux fois lorsque vous créez un triangle rectangle en Java
Code à utiliser lorsque vous souhaitez traiter Json en Java avec uniquement des bibliothèques standard
Résoudre l'erreur CreateProcess = 206 lors de l'exécution de Java dans un environnement Windows
Ce que vous utilisez souvent lorsque vous faites du développement Web avec Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Utilisez JLine lorsque vous souhaitez gérer les frappes sur la console caractère par caractère en Java
Lorsque vous souhaitez implémenter des tests de bibliothèque Java avec Spock en multi-module avec Gradle dans Android Studio 3
3 Implémentez un interpréteur simple en Java
J'ai créé un PDF avec Java.
Un exemple simple de rappels en Java
Restez coincé dans un Java Primer
Utilisez-vous Stream en Java?
Dans Java 10, lorsque l'éclipse gradle est terminée et que JavaSE-1.10 sort, ...
ProxyFactory est pratique lorsque vous souhaitez tester AOP avec Spring!
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java) (1)
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java) (3)
[Swift] Lorsque vous voulez savoir si le nombre de caractères dans String correspond à un certain nombre ...
Une note sur les différences entre les interfaces et les classes abstraites en Java
Lorsque vous souhaitez que Rails désactive une session pour un contrôleur spécifique
Passez les paramètres lors du débogage de vscode java. [Remarque]
[Création] Un mémorandum sur le codage en Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
Mauvaises habitudes signalées dans les revues de code lorsque Java était débutant
[JAVA] Project Euler, je suis resté coincé au Q8, alors prenez note
Java crée un tableau dans un document Word
(Limité à Java 7 ou version ultérieure) Je souhaite que vous compariez des objets dans Objects.equals
Java crée un graphique circulaire dans Excel
Qu'est-ce qu'une classe en langage Java (1 /?)
Qu'est-ce qu'une classe en langage Java (2 /?)
Créer une application TODO dans Java 7 Créer un en-tête
La première chose à faire lorsque vous voulez être satisfait d'Heroku sur GitHub avec Eclipse sur Java
Créons une application de calcul avec Java
Je souhaite obtenir l'adresse IP lors de la connexion au Wi-Fi avec Java
Implémenter quelque chose comme une pile en Java
Diviser une chaîne avec ". (Dot)" en Java
Comment passer un proxy lors du lancement de REST avec SSL en Java
Création d'une classe de matrice dans Java Partie 1
Je veux ForEach un tableau avec une expression Lambda en Java
[Java] Raccourcis Eclipse qui peuvent être améliorés en sachant lors des allers-retours entre le code source d'un projet
Que faire lorsque vous pensez que vous ne pouvez pas Groovy-> Java avec IntelliJ IDEA CE
Lorsque vous souhaitez notifier une erreur quelque part lors de l'utilisation de graphql-spring-boot avec Spring Boot
Une note quand je suis accro à l'utilisation de Docker Hub Vault en mode serveur
La cause n'est pas visible lors de l'appel de méthodes d'autres classes en java
Lors de l'utilisation d'une liste en Java, java.awt.List sort et une erreur se produit
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (Black Magic)
J'ai créé un programme de jugement des nombres premiers en Java
GetInstance () à partir d'une classe @Singleton dans Groovy à partir de Java
Ajouter .gitignore lors de la création d'un projet dans Xcode
Traitement d'échappement lors de la création d'une URL dans Ruby