Was ist die Java 8 Stream API-Entsprechung für LINQ Join?

8

In C # /. Net ist es möglich, IEnumerable Sequenzen mit der Erweiterungsmethode Enumerable.Join in einem SQL 'JOIN ... ON' Weg zu verbinden.

Gibt es in Java 8 (Stream API) etwas Ähnliches? Oder was ist der beste Weg, um Enumerable.Join zu simulieren?

Siehe: Ссылка

    
Titanium 19.02.2015, 20:35
quelle

3 Antworten

1

Ich habe kein vorhandenes Äquivalent gefunden, aber die folgende Methode sollte funktionieren:

%Vor%

Ich habe den Code nur kurz mit den folgenden Eingaben getestet:

%Vor%
  • Die int s sind ihre eigenen Schlüssel, also keine Umwandlung
  • Die Strings werden entsprechend ihrem Hex-Wert - 9
  • auf int s abgebildet
  • (Die Elemente stimmen überein, wenn die int -Werte standardmäßig gleich sind)
  • Passende Paare werden in String eingefügt

Die folgenden (korrekten) Ergebnisse werden gedruckt:

%Vor%

Natürlich sind weitere eingehende Tests erforderlich, aber ich glaube, dass diese Implementierung korrekt ist. Es könnte auch effizienter sein, ich bin offen für Vorschläge.

    
DennisW 19.02.2015, 21:35
quelle
8

Join ist nur syntaktisch Zucker für Stream.flatMap() , wie in diesem Artikel erklärt . Betrachten Sie dieses Beispiel:

%Vor%

Das Ergebnis ist:

%Vor%

Im obigen Beispiel entspricht flatMap() (INNER) JOIN , während die Operation filter() des verschachtelten Streams der ON -Klausel entspricht.

jOOλ ist eine Bibliothek, die innerJoin() und andere Join-Typen implementiert, um darüber zu abstrahieren, z. um Stream-Inhalte zu puffern, falls Sie zwei Stream Instanzen statt zwei Collection Instanzen verbinden möchten. Mit jOOλ würdest du dann schreiben:

%Vor%

... welches druckt (die Ausgabe sind Tupel, was mehr wie die Semantik von SQL's Semantik ist):

%Vor%

(Disclaimer, ich arbeite für die Firma hinter jOOλ)

    
Lukas Eder 27.08.2015 11:41
quelle
0

Ich kam auch von C # und vermisste diese Funktion. Ein großer Vorteil wäre, lesbaren Code zu haben, indem Absicht ausgedrückt wird. Also schrieb ich meinen eigenen streamjoin , der wie C # Enumerable.Join () funktioniert. Plus: Es toleriert Null-Tasten.

%Vor%     
simomat 16.10.2016 04:31
quelle

Tags und Links