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é.
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.
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.
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
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;
}
Donc, si vous voulez Tuple en Java,
Cela semble bon de penser cela.
Recommended Posts