webentwicklung-frage-antwort-db.com.de

Java 8 Stream-Sortierliste der Zeichenfolge

Ich rufe die sortierte Methode in einem Stream auf. Und das Java-Dokument sagt:

"Sortierte Methode gibt einen Stream zurück, der aus den Elementen dieses Streams besteht, sortiert nach natürlicher Reihenfolge."

Aber wenn ich den Code unten laufe:

List<String> list = new ArrayList<String>();
list.add("b");
list.add("a");
list.add("z");
list.add("p");
list.stream().sorted();
System.out.println(list);

Ich bekomme Ausgabe als

[b, a, z, p]

Warum erhalte ich nicht die Ausgabe einer natürlichen Art?

6
saurabh suman

Ändere das

list.stream().sorted();
System.out.println(list);

zu so etwas

list.stream().sorted().forEachOrdered(System.out::println);

Ihre Methode lautet println der Variable list (nicht des sortierten Streams). Alternativ (oder zusätzlich) können Sie Ihre Initialisierungsroutine verkürzen und die Variable List erneut sammeln

List<String> list = new ArrayList<>(Arrays.asList("b","a","z","p"));
list = list.stream().sorted().collect(Collectors.toList());
System.out.println(list);

Welche Ausgänge (wie Sie wahrscheinlich erwartet haben)

[a, b, p, z]
11
Elliott Frisch

Sie sollten das Ergebnis der Sortierung sammeln und es Ihrer Liste zuordnen.

    List<String> list = new ArrayList<String>();
    list.add("b");
    list.add("a");
    list.add("z");
    list.add("p");
    list = list.stream().sorted().collect(Collectors.toList());
    System.out.println(list);
5
Morozov Ivan

Wenn Sie Ihre sortierte Liste haben möchten.

Lass uns das ändern 

list.stream().sorted();

zu 

list.sort((e1, e2) -> e1.compareTo(e2));

Ich hoffe das hilft!

3
David Pham

Ihr Stream hat keinen Terminal-Operator und wird daher nicht verarbeitet. Zu den Terminalbetreibern gehören unter anderem: forEach, toArray, reduzieren, sammeln. Ihr Codesegment sollte ähnlich sein

list.stream().sorted().forEachOrdered(System.out::println);
3
user6929867