Durchsuchen einer TreeMap durch ein Mitglied der Wertklasse mithilfe von Lambda-Ausdrücken

8

Ich habe eine Frage zu Lambda-Ausdrücken in Java 8.

Betrachten Sie die folgende Message -Klasse:

%Vor%

, das die Schnittstelle MessageBase implementiert. Ich speichere Objekte der Klasse Message in einem TreeMap - Map<Long, Message> messages . Der Schlüssel ist ein Zeitstempel und der Wert ist ein Message -Objekt. Ich muss alle TreeMap Einträge nach Autor finden, was ein Feld der Klasse Message ist. Ich versuche dies mit Lambda-Ausdrücken zu tun.

Hier ist mein Code:

%Vor%

Mit diesem Code kann ich nur einen Eintrag bekommen. Können Sie mir helfen, eine Liste aller Einträge zu erhalten, die den Filter bestehen?

    
Eran 15.02.2016, 09:37
quelle

2 Antworten

8

findAny gibt höchstens einen Eintrag zurück. Sie sollten den Stream in einem Collection oder einem Map sammeln, um alle Einträge zu erhalten:

%Vor%

oder

%Vor%     
Eran 15.02.2016, 09:39
quelle
0

Ein anderer Weg wäre, alle Message Instanzen nach Autor zu gruppieren:

%Vor%

Dies wird eine Liste von Nachrichten für jeden Autor erstellen.

Wenn Sie auch den Schlüssel der ursprünglichen Map nach Autor gruppieren möchten, können Sie eine überladene Version der Methode groupingBy() verwenden, mit der Sie die ursprünglichen Einträge beibehalten können:

%Vor%

Hier wird eine Karte von Karten erstellt und die Einträge werden gestreamt (anstatt nur die Werte, wie im ersten Beispiel). Die erste Map ist eine Gruppierung nach Autor, während die zweite Map eine Submap der ursprünglichen Map ist, die nur die Einträge enthält, die dem entsprechenden Autor entsprechen.

    
quelle