Java enthält auch relativ moderne Funktionen wie Lambda-Ausdrücke und die Stream-API, und es gibt immer mehr Fälle, in denen Sie das Verarbeitungsergebnis als zwei oder mehr Werte zurückgeben möchten. Eine Möglichkeit, dies zu tun, ist Tuple, das häufig in anderen Sprachen verfügbar ist. Java hat jedoch kein Tupel als Standard-API, daher ist es ein Memo, als ich ein wenig nachforschte.
Ein Tupel ist eine Reihe geordneter Elemente. Ursprünglich ein mathematisches Konzept, bieten einige Programmiersprachen einen Datentyp namens Taple.
Die Spezifikationen des Taple-Typs unterscheiden sich je nach Sprache, es können jedoch mehrere verschiedene Arten von Daten und Objekten gespeichert werden, und jedem Element wird eine Seriennummer (Index) wie ein Array zugewiesen, das eine Datenstruktur darstellt, die das Element identifiziert. Häufig. In einer funktionalen Sprache wie LISP wird ein Datentyp mit einer dichotomisierten Struktur als Taple bezeichnet.
Dies ist ein Zitat aus e-Words, und obwohl dies von der Sprache und Implementierung abhängt, ist Tuple hier eine Datenstruktur zum Gruppieren einer beliebigen Anzahl von Elementen und Typen.
Does Java SE 8 have Pairs or Tuples? Die Antworten der Java- und OpenJDK-Entwickler von Oracle sind hilfreich. (Teilauszug und Superzusammenfassung)
Java SE schlug vor, eine Pair (Tuple) -Klasse zu haben, und wurde mindestens einmal abgelehnt. Ich verstehe jedoch die Notwendigkeit mehrerer Implementierungen in anderen Bibliotheken und Anwendungen. Wenn Sie jedoch eine Struktur wie Pair als Standard-API bereitstellen, möchten Sie komplexe Datenstrukturen mit Pairs und Sammlungen darstellen, ohne Abstraktionen (Klassen) zu verwenden. (
Pair <List <String>, List <Pair <String, List <Boolean >>>>
,Map <Double, List <Pair <QueryTuple, Map <StatType, Number >>>>
)
Für Namenskonventionsprobleme und Umgebungen wie die Stream-API sind außerdem Paare in Kombination mit Grundelementen sowie Paare für Objekte erforderlich. ("ObjIntPair", "ObjLongPair", "ObjDoublePair", "IntObjPair", "IntIntPair" ...)
Obwohl die Möglichkeit einer zukünftigen Implementierung besteht, scheint die aktuelle Situation so zu sein, dass nicht entschieden wurde, sie als Standard-API hinzuzufügen.
Obwohl andere Paradigmen enthalten sind, scheint es, wenn Sie Tupel in der objektorientierten Sprache Java möchten, dass die aktuelle Richtung darin besteht, eine geeignete Abstraktion (Klasse) zu erstellen.
Obwohl es sich um eine Java-Richtlinie handelt, gibt es Zeiten, in denen Sie dies wünschen. Sie können auch javafx.util.Pair verwenden, aber das Paket ist javafx oder nur Pair ist vorbereitet. Ich glaube nicht, dass es möglich ist, eine externe Bibliothek zu verwenden.
In vielen Fällen wird es von einer relativ funktionsorientierten Bibliothek bereitgestellt.
Es ist wichtig zu beachten, dass einige Bibliotheken Tupel haben, die auch veränderlich und unveränderlich sind. Insbesondere sollte beachtet werden, dass unveränderliche Eigenschaften nicht mit APIs verwendet werden können, die veränderbare Eigenschaften annehmen, wie z. B. der Collector-Akkumulator. Abhängig von der Bibliothek werden auch andere Klassen als Tupel hinzugefügt. Wenn Sie es also einfach einführen, kann die Verwaltung kompliziert werden. * 1
Während das Hinzufügen mit einer Bibliothek einfach ist, gibt es auch Probleme * 1. Wenn es sich also um ein einfaches Tupel handelt, für das keine Funktionalität erforderlich ist, gibt es auch eine Methode, um es einfach mit Lombok oder dergleichen zu implementieren.
@Data(staticConstructor = "of")
public class Pair<A, B> {
private final A left;
private final B right;
}
Wenn Sie also Tuple in Java möchten,
Es scheint gut zu sein, das zu denken.
Recommended Posts