Streams - Abfrage absteigend sortieren

S

stefan_jj

Mitglied
Hallo liebe Community,

Ich habe ein Problem bei einer Methode. Leider kann ich die Abfrage nicht absteigend sortieren. Im Prinzip möchte ich eine Liste absteigend nach der Häufigkeit der "Tags" sortieren. Das Limit bedeutet bloß wie viele Tags angezeigt werden sollen. Bspw Top Ten.

aufsteigend klappt es. nur leider wird der ".reversed()"-Befehl nicht zugelassen. Kann mir wer erklären warum? Und wie dann der Code richtig lauten müsste?

Java:
public List<String> topT(int n) {
        List<String> topT = this.stream().flatMap(a -> Arrays.stream(a.getTags()))
                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
                .entrySet()
                .stream()
                .sorted(Comparator.comparing(Entry::getValue))
                .limit(n)
                .map(b -> b.getKey() + " x " + b.getValue())
                .collect(Collectors.toList());
        for(int i = 0; i < topT.size(); i++) {
            System.out.print(topT.get(i));
            System.out.print("\n");
        }
        return topT;
    }

danke und lg
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
aufsteigend klappt es. nur leider wird der ".reversed()"-Befehl nicht zugelassen.
Hast du ihn vielleicht nach der falschen Klammer gesetzt?

Also Vermutung ist du hast ihn so gesetzt:
Java:
.sorted(Comparator.comparing(Entry::getValue)).reversed()
anstatt
Java:
.sorted(Comparator.comparing(Entry::getValue).reversed())

Wenn die Vermutung nicht stimmt, zeig mal deinen Ansatz mit reversed drin und was genau heißt nicht zugelassen? Welche Meldung erscheint?
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Kleiner Tipp noch
Java:
  .map(b -> b.getKey() + " x " + b.getValue())
  .collect(Collectors.toList());
for(int i = 0; i < topT.size(); i++) {
  System.out.print(topT.get(i));
  System.out.print("\n");
}

Wenn du dich für Streams entscheidest zieh es durch ;-)

Java:
.map(b -> b.getKey() + " x " + b.getValue())
.peek(System.out::println)
.collect(Collectors.toList());
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Fachliche Frage darüber hinaus: Wieso heißt die Methode "topT" (steht wohl für TopTen), wenn diese das Limit als Parameter erhält? Wenn ich topT(40) aufrufe, dann ist es wohl kaum mehr eine Top Ten ;-) Lässt du deine Klasse von List erben, dass du auf diese ein stream() anwenden kannst? Ohne den Code zu kennen vermute ich du brichst das Composition over Inheritance "Gesetz"
 
S

stefan_jj

Mitglied
Hallo,

danke für die schnellen Antworten.
folgende Fehlermeldung kommt wenn ich:

Java:
.sorted(Comparator.comparing(Entry::getValue).reversed())

eingebe.

"The type Map.Entry does not define getValue(Object) that is applicable here".


topT steht für TopTags. Nicht für topTen =)
 
L

LimDul

Top Contributor
Kurzes Googlen sagt hier was: https://stackoverflow.com/questions/33091946/java-8-stream-flatmap-and-group-by-code-compiler-error
Ist war Älter, aber mit Generics in Streams gibt es immer wieder Probleme.

ich kann den Fehler reproduzieren.

Java:
Comparator<Entry<String, Integer>> comparator = Comparator.comparing(Entry::getValue).reversed();
Compile Fehler

Java:
        Comparator<Entry<String, Integer>> comparator = Comparator.comparing(Entry::getValue);
        comparator = comparator.reversed();
Kompiliert.

Definier dir den Comparator wie in meinem zweiten Beispiel außerhalb des Streams und verwende den da.
 
Flown

Flown

Administrator
Mitarbeiter
Es sieht so aus also ob du noch mit Java 8 unterwegs bist und da ist die Typinferenz noch etwas holprig:
Java:
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())
sollte helfen.
Oder du musst etwas mehr qualifizieren:
Java:
.sorted(Comparator.<Map.Entry<XXX, Long>, Long>comparing(Map.Entry::getValue).reversed())
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Ich kann es leider nicht erklären, finde ich auch komisch. Beim lokalen Test bekomme ich sogar eine andere Fehlermeldung als du. Aber ich kann dir einen Workaround mitgeben:
Java:
.sorted(Comparator.comparing(Entry::getValue, Comparator.reverseOrder()))
 
S

stefan_jj

Mitglied
Vielen Dank für eure Hilfe.

Es sieht so aus also ob du noch mit Java 8 unterwegs bist und da ist die Typinferenz noch etwas holprig
nope- arbeite mit Java13 =)

alle 3 Varianten haben funktioniert.
letztendlich habe ich:
Java:
.sorted(Comparator.comparing(Entry::getValue, Comparator.reverseOrder()))
verwendet.

danke nochmal. Das Problem hat mich echt verwirrt gehabt. =)

lg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Collections Streams - Hilfestellung bei komplexer Struktur Java Basics - Anfänger-Themen 9
S Streams - kleinstes Element finden Java Basics - Anfänger-Themen 4
J String Array zu Map<Character, List<Character>> mit Streams Java Basics - Anfänger-Themen 1
Kirby_Sike Fehlende Int Werte aus Array mit streams finden Java Basics - Anfänger-Themen 19
W Eclipse Autoformatierung für Streams ändern ? Java Basics - Anfänger-Themen 1
S Lambda Ausdrücke Streams Java Basics - Anfänger-Themen 6
I Streams Java Basics - Anfänger-Themen 12
N Frage zu Streams Java Basics - Anfänger-Themen 3
U Input/Output Unterschiede Streams Java Basics - Anfänger-Themen 2
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5
C system.out.printf mit streams benutzen Java Basics - Anfänger-Themen 7
C Methoden Sortieren mit Streams: Auf- und absteigend Java Basics - Anfänger-Themen 2
O Streams und die flush Methode Java Basics - Anfänger-Themen 3
P InputStream eines Musik-Streams abspielen Java Basics - Anfänger-Themen 2
M Input/Output Streams Java Basics - Anfänger-Themen 5
T Klassen wie funktionieren Streams, warum bekomme ich int zurück? Java Basics - Anfänger-Themen 2
J Java 8 Streams - Frage zu "reduce" Java Basics - Anfänger-Themen 6
Sogomn Input/Output Reader, Writer und Streams Java Basics - Anfänger-Themen 6
T Fehler mit Streams! Java Basics - Anfänger-Themen 2
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
J Per I/O Streams in LinkedList oder ArrayList schreiben/lesen Java Basics - Anfänger-Themen 6
I Java Streams Java Basics - Anfänger-Themen 6
R Streams for runaways Java Basics - Anfänger-Themen 5
RySa Input/Output Datei kann nicht gelöscht werden, obwohl Streams geschlossen sind. Java Basics - Anfänger-Themen 2
D Input/Output streams und readLine() Java Basics - Anfänger-Themen 3
firefexx Input/Output close() bei mehreren Streams Java Basics - Anfänger-Themen 5
M Frage zu Streams Java Basics - Anfänger-Themen 9
C try finally - Streams schließen Java Basics - Anfänger-Themen 7
M Streams und Sockets Java Basics - Anfänger-Themen 3
M file löschen, streams evtl noch offen Java Basics - Anfänger-Themen 7
G Character-orientierte File-Streams mit der Klasse FileReader Java Basics - Anfänger-Themen 5
S Piped Streams / Threads Java Basics - Anfänger-Themen 6
H Frage zu Byte-Streams Java Basics - Anfänger-Themen 2
P Streams mit Sockets Java Basics - Anfänger-Themen 7
V Performance Lesen und Schreiben aus/in Streams Java Basics - Anfänger-Themen 4
C RandomAccessFile vs. Streams Java Basics - Anfänger-Themen 5
M Probleme mit den Streams Java Basics - Anfänger-Themen 2
G streams schließen Java Basics - Anfänger-Themen 2
P Fragen zu STreams Java Basics - Anfänger-Themen 5
M Streams Java Basics - Anfänger-Themen 4
H Streams etc. erster Versuch Zeilen aus einer Datei zu lesen Java Basics - Anfänger-Themen 6
? Streams Java Basics - Anfänger-Themen 2
R RandomAccessFile mit anderen Streams verbinden Java Basics - Anfänger-Themen 5
G Rekursionsaufgabe mit Streams Java Basics - Anfänger-Themen 5
J Problem mit Streams Java Basics - Anfänger-Themen 15
L Streams und Reader/Writer Java Basics - Anfänger-Themen 8
K Frage zu SdtOut streams bzw. Socket Programmierung Java Basics - Anfänger-Themen 3
M Streams, read and write Java Basics - Anfänger-Themen 2
M Streams Java Basics - Anfänger-Themen 2
B Streams wollen scheinbar nicht schließen Java Basics - Anfänger-Themen 6
S Umwandlung eines Character-Streams in ein Image Java Basics - Anfänger-Themen 17
E Probleme mit Streams Java Basics - Anfänger-Themen 3
O if Abfrage erkennt String nicht Java Basics - Anfänger-Themen 1
NeoLexx Abfrage mit instanceof führt zu unerwarteten Wert Java Basics - Anfänger-Themen 9
N Bedinugng If-Abfrage wird nie erfüllt Java Basics - Anfänger-Themen 4
L boolean-Abfrage enumeration Java Basics - Anfänger-Themen 3
Y Methoden Wie kann ich eine if-Abfrage bei Setters bauen? Java Basics - Anfänger-Themen 6
F If Abfrage gibt falsches Ergebnis.... Java Basics - Anfänger-Themen 6
F POST-Request mit json - Abfrage mit Java Java Basics - Anfänger-Themen 2
C Javafunktion zur Abfrage eines Quellcodes Java Basics - Anfänger-Themen 15
A JOPtionPaneOptionDialog Abfrage welcher Button gedrückt wurde? Java Basics - Anfänger-Themen 8
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
G if Abfrage: Nicht jeder Fall berücksichtigt Java Basics - Anfänger-Themen 2
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
J Erste Schritte if Abfrage von JButton in 2. Klasse Java Basics - Anfänger-Themen 27
S If Abfrage nur mit bestimmter Initialisierung? Java Basics - Anfänger-Themen 8
Z Boolean Abfrage in einer for each Schleife Java Basics - Anfänger-Themen 2
deatzi Variable aus If Abfrage später nutzen Java Basics - Anfänger-Themen 4
C Instanz einer Klasse während if-Abfrage erzeugen und bei zweiter if-Abfrage wiederverwenden Java Basics - Anfänger-Themen 6
S Backspace Abfrage funktioniert nicht Java Basics - Anfänger-Themen 4
F Interface JFrame mit if-Abfrage automatisch schließen lassen? Java Basics - Anfänger-Themen 3
R Abfrage von Variablen in Unterklassen einer ArrayList Java Basics - Anfänger-Themen 9
G Passwort und Passwort wiederholen in if-Abfrage vergleichen Java Basics - Anfänger-Themen 15
P Altklausur: Abfrage der Summe Java Basics - Anfänger-Themen 9
N Methoden Attribut Abfrage eines anderen Objektes Java Basics - Anfänger-Themen 36
D MySQL Abfrage in JTable speichern Java Basics - Anfänger-Themen 43
D SQL Abfrage anpassen Java Basics - Anfänger-Themen 17
H For-Schleife innerhalb If-Abfrage? Java Basics - Anfänger-Themen 3
F Abfrage ob Eingabe eine Zahl ist Java Basics - Anfänger-Themen 3
O Datentypen Volle 16 Bit eines Short für flags Abfrage nutzen Java Basics - Anfänger-Themen 11
S Input/Output Doppelte Input-Abfrage Java Basics - Anfänger-Themen 3
S Input/Output Programm läuft nach input-Abfrage nicht weiter. Java Basics - Anfänger-Themen 2
M Variablen Eine etwas andere if Abfrage ! Java Basics - Anfänger-Themen 10
H if-Abfrage, ungleich und falscher true Wert? Java Basics - Anfänger-Themen 11
F Ja Nein Abfrage und andere Probleme Java Basics - Anfänger-Themen 5
OlafHD Fehler Bei der if Abfrage Java Basics - Anfänger-Themen 5
quecksilver if-Abfrage in main ausführen Java Basics - Anfänger-Themen 4
D if-Abfrage Java Basics - Anfänger-Themen 12
J Abfrage für Programmwiederholung Java Basics - Anfänger-Themen 2
K Alternative zur If-Abfrage Java Basics - Anfänger-Themen 3
M Java als Webanwendung mit Datenbank abfrage Java Basics - Anfänger-Themen 3
D Abfrage ob Variableninhalt korrekt Java Basics - Anfänger-Themen 5
W Vergleich mit If-Abfrage nur für Zahlen bis 07 möglich - Warum? Java Basics - Anfänger-Themen 7
D Operatoren IF Abfrage liefert falsches Ergebnis Java Basics - Anfänger-Themen 4
X Ja nein abfrage? Java Basics - Anfänger-Themen 9
A Erste Schritte Problem bei meiner if-Abfrage! Java Basics - Anfänger-Themen 5
M Enum-Variabel-Abfrage funktioniert nicht? Java Basics - Anfänger-Themen 2
S Java Counter: nur 1 mal hochzählen auch wenn Abfrage mehrmals zutrifft. Java Basics - Anfänger-Themen 1
E Erste Schritte [Noob-Frage] Meine If-Abfrage macht nicht, was sie soll... Java Basics - Anfänger-Themen 2
C Abfrage nach einem Bild im Array Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Anzeige

Neue Themen


Oben