Java 8 Lambda-GruppierungMit X und Y gleichzeitig

8

Ich suche nach einem Lambda, um die bereits abgerufenen Daten zu verfeinern. Ich habe eine rohe Ergebnismenge, wenn der Benutzer das Datum nicht ändern möchte, verwende ich Javas Lambda, um durch die Ergebnisse für dann zu gruppieren. Und ich bin neu zu Lambdas mit Java.

Das Lambda, nach dem ich suche, funktioniert ähnlich wie diese Abfrage.

%Vor%     
Hugo Prudente 21.01.2015, 19:04
quelle

2 Antworten

8

Ich nehme an, Sie haben eine Liste von Objekten und möchten eine Karte mit den gegebenen Gruppierungen erstellen. Ich bin ein wenig verwirrt von Ihrem x, y, w, z, also werde ich meine eigenen Felder verwenden. Aber so würde ich es machen:

%Vor%

Wenn Sie beispielsweise den Durchschnitt der Daten für Elemente mit den Gruppen A, B ermitteln möchten, verwenden Sie:

%Vor%

Wenn Sie mehr als einen Datensatz gleichzeitig zusammenfassen möchten, wird es etwas komplizierter. Sie müssen Ihre eigene Wrapper-Klasse schreiben, die mehrere Statistiken ansammeln kann. Hier ist ein Beispiel mit beiden Datenelementen in Entry (ich habe sie zu einem int und einem double gemacht, um es ein bisschen interessanter zu machen).

%Vor%

Diese Klasse kann dann verwendet werden, um einen eigenen Kollektor zu erstellen:

%Vor%

Nun geben Ihre Maps einen CompoundStats anstelle einer IntSummaryStatistics zurück:

%Vor%

Beachten Sie auch, dass dies sinnvoller wäre, wenn Sie eine separate Klasse für Ihre Gruppierungen erstellen, anstatt die oben beschriebene zweistufige Map zu verwenden. Wieder keine schwierige Modifikation, falls erforderlich.

Hoffentlich ist das in Ihrem eigenen Fall nützlich.

    
sprinter 22.01.2015 01:05
quelle
4

Ich werde für diese Übung den Tuple2 -Typ aus jOOλ verwenden, aber Sie können auch Ihren eigenen erstellen Tupel-Typ, wenn Sie die Abhängigkeit vermeiden möchten.

Ich gehe auch davon aus, dass Sie damit Ihre Daten darstellen:

%Vor%

Sie können jetzt schreiben:

%Vor%

Oder noch besser (mit der neuesten jOOλ API):

%Vor%

Die Kartenstruktur ist jetzt:

%Vor%

Wenn toString() auf der obigen Karte aufgerufen wird, wird Folgendes erzeugt:

%Vor%

Sie haben jetzt alle Ihre Statistiken.

Randnotiz

Natürlich kenne ich Ihre genauen Anforderungen nicht, aber ich vermute, dass Sie schnell komplexere Aggregationen in Ihrem Bericht benötigen, wie Mediane, inverse Verteilung und alle möglichen netten OLAP-Funktionen, wenn Sie das tun erkennen, dass SQL für diese Art von Aufgabe einfach eine viel einfachere Sprache ist.

Auf der anderen Seite werden wir definitiv weitere SQLesque-Features zu JOOλ hinzufügen . Dieses Thema hat auch inspiriert Ich schreibe einen vollständigen Blogpost mit mehr Details über den beschriebenen Ansatz .

    
Lukas Eder 22.01.2015 07:47
quelle

Tags und Links