Ein Hinweis, wenn Sie Tupel in Java möchten

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.

Was ist Tupel?

Tupel

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.

Warum die Standard-API kein Tupel enthält

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.

Verwenden Sie die Bibliothek

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

Implementieren

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;
}

Zusammenfassung

Wenn Sie also Tuple in Java möchten,

  1. Überlegen Sie, ob es in einer Klasse usw. ausgedrückt werden kann.
  2. Wenn Sie die Mindestfunktionalität wünschen, verwenden Sie stattdessen Ihr eigenes Tupel.
  3. Betrachten Sie eine Bibliothek für den vollständigen Gebrauch

Es scheint gut zu sein, das zu denken.

Recommended Posts

Ein Hinweis, wenn Sie Tupel in Java möchten
Wenn Sie Annotation in Java 8 dynamisch ersetzen möchten
Bei der Suche nach mehreren in einem Java-Array
Wenn Sie InputStream in JDBI3 binden möchten
[Swift] Verwenden Sie nonzeroBitCount, wenn Sie in Swift popcnt möchten
Ein Hinweis zum Initialisieren von Feldern im Java-Lernprogramm
Was ich beim Erstellen eines Servers in Java gelernt habe
Hinweise zu Java GC
Suchen Sie eine Teilmenge in Java
Ein Hinweis bei der Untersuchung von Javalin
Sie müssen nicht zweimal schreiben, wenn Sie in Java ein rechtwinkliges Dreieck erstellen
Code, der verwendet werden soll, wenn Sie Json nur mit Standardbibliotheken in Java verarbeiten möchten
Beheben Sie den CreateProcess-Fehler = 206, wenn Sie Java in einer Windows-Umgebung ausführen
Dinge, die Sie häufig bei der Webentwicklung mit Java verwenden
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Verwenden Sie JLine, wenn Sie Tastenanschläge auf der Konsole zeichenweise in Java verarbeiten möchten
Wenn Sie Java-Bibliothekstests mit Spock in mehreren Modulen mit Gradle in Android Studio 3 implementieren möchten
3 Implementieren Sie einen einfachen Interpreter in Java
Ich habe ein PDF mit Java erstellt.
Ein einfaches Beispiel für Rückrufe in Java
Bleiben Sie in einem Java Primer stecken
Verwenden Sie Stream in Java?
In Java 10, wenn Gradle Eclipse abgeschlossen ist und JavaSE-1.10 herauskommt, ...
ProxyFactory ist praktisch, wenn Sie AOP mit Spring testen möchten!
[Anmerkung] Was ich in einem halben Jahr von unerfahrenen (Java) gelernt habe (1)
[Anmerkung] Was ich in einem halben Jahr von unerfahrenen (Java) gelernt habe (3)
[Swift] Wenn Sie wissen möchten, ob die Anzahl der Zeichen in String mit einer bestimmten Anzahl übereinstimmt ...
Ein Hinweis zu den Unterschieden zwischen Schnittstellen und abstrakten Klassen in Java
Wenn Rails eine Sitzung für einen bestimmten Controller deaktivieren soll
Übergeben Sie Parameter beim Debuggen von vscode java. [Hinweis]
[Erstellen] Ein Memorandum über das Codieren in Java
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
In Java-Überprüfungen wurde auf schlechte Gewohnheiten hingewiesen, als Java noch Anfänger war
[JAVA] Projekt Euler, ich steckte im achten Quartal fest
Java erstellt eine Tabelle in einem Word-Dokument
(Beschränkt auf Java 7 oder höher) Ich möchte, dass Sie Objekte in Objects.equals vergleichen
Java erstellt ein Kreisdiagramm in Excel
Was ist eine Klasse in der Java-Sprache (1 /?)
Was ist eine Klasse in der Java-Sprache (2 /?)
Erstellen Sie eine TODO-App in Java 7 Create Header
Das erste, was Sie tun müssen, wenn Sie mit Heroku auf GitHub mit Eclipse auf Java zufrieden sein möchten
Lassen Sie uns eine Taschenrechner-App mit Java erstellen
Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle
Implementieren Sie so etwas wie einen Stack in Java
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
So übergeben Sie einen Proxy, wenn Sie REST mit SSL in Java auslösen
Erstellen einer Matrixklasse in Java Teil 1
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
[Java] Eclipse-Verknüpfungen, die verbessert werden können, indem Sie wissen, wann Sie zwischen Quellcode in einem Projekt hin und her wechseln
Was tun, wenn Sie glauben, dass Sie mit IntelliJ IDEA CE nicht Groovy-> Java können?
Wenn Sie irgendwo einen Fehler melden möchten, wenn Sie graphql-spring-boot mit Spring Boot verwenden
Ein Hinweis, wenn ich süchtig danach bin, Docker Hub Vault im Servermodus zu verwenden
Ursache ist nicht sichtbar, wenn Methoden anderer Klassen in Java aufgerufen werden
Bei Verwendung einer Liste in Java wird java.awt.List ausgegeben und ein Fehler tritt auf
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 (Black Magic) ausgeben.
Ich habe ein Programm zur Beurteilung von Primzahlen in Java erstellt
GetInstance () aus einer @ Singleton-Klasse in Groovy aus Java
Fügen Sie .gitignore hinzu, wenn Sie ein Projekt in Xcode erstellen
Escape-Verarbeitung beim Erstellen einer URL in Ruby