Der statische Kontext kann in Collectors nicht auf nicht-statische Daten zugreifen

7

Ich habe eine Gruppe von Studenten. Zuerst möchte ich sie nach den Markierungen gruppieren. Dann möchte ich diese Sets weiter in gleichnamige Schüler gruppieren.

%Vor%

Ich erhalte eine Fehlermeldung,

  

Nicht statische Methode kann nicht aus einem statischen Kontext referenziert werden.

Ja. Ich bin mir ziemlich bewusst, dass ich eine nicht-statische Methode nicht ohne eine Instanz beziehen kann. Aber bei all diesen Stream-Operationen bin ich etwas verwirrt, was wirklich schiefgelaufen ist.

Statt wie das zu beheben; Ich möchte wirklich wissen, was hier vor sich geht. Irgendwelche Ihrer Eingänge werden geschätzt!

Weil, wenn ich schreibe, die folgende Gruppierung vollständig gültig ist;

%Vor%

Hier ist meine Student.java-Klasse (falls Sie es brauchen)

%Vor%     
Jude Niroshan 21.10.2016, 09:07
quelle

2 Antworten

19

Leider ist die Fehlermeldung " Nicht-statische Methode kann nicht aus einem statischen Kontext verwiesen werden ." ist nur ein Platzhalter für jedes Typ-Mismatch-Problem, wenn Methodenverweise beteiligt sind. Der Compiler konnte das eigentliche Problem nicht ermitteln.

In Ihrem Code stimmt der Zieltyp Map<Integer, Map<String, List<String>>> nicht mit dem Ergebnistyp des kombinierten Kollektors überein, der Map<Integer, List<String>> ist. Der Compiler hat jedoch nicht versucht, diesen (eigenständigen) Ergebnistyp zu ermitteln (genestete) generische Methodenaufrufe, die Methodenreferenzen enthalten, erfordern den Zieltyp zum Auflösen der Methodenreferenzen. Es wird also kein Typenkonflikt der Zuweisung gemeldet, sondern ein Problem bei der Auflösung der Methodenreferenzen.

Der richtige Code ist einfach

%Vor%     
Holger 21.10.2016 10:25
quelle
1

Ich denke, Holger hat eine gute Erklärung für den Fehler gegeben und warum es in einem Lauf keinen Sinn macht.

Wenn Sie Ihr Ziel betrachten, denke ich, dass dies die Lösung ist, die Sie brauchen.

%Vor%

Dies würde Ihnen einfach eine Schülerliste geben, die zuerst nach Marken und dann nach Namen gruppiert wird. :))

    
Supun Wijerathne 23.10.2016 08:12
quelle