web-dev-qa-db-fra.com

Liste de chaîne de tri Java 8

J'appelle la méthode triée sur un flux. Et le document Java dit:

"La méthode triée renvoie un flux constitué des éléments de ce flux, triés selon leur ordre naturel."

Mais quand je lance le code ci-dessous:

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);

Je reçois une sortie en

[b, a, z, p]

Pourquoi je ne reçois pas la sortie d'une sorte naturelle?

6
saurabh suman

Change ça

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

à quelque chose comme

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

Votre méthode est println le list (pas le flux trié). Alternativement (ou en plus), vous pouvez raccourcir votre routine d’initialisation et collecter à nouveau le List comme

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

Quelles sorties (comme vous avez probablement prévu)

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

Vous devez collecter le résultat du tri, puis l’affecter à votre liste.

    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

Si vous voulez avoir votre liste triée.

Changeons cela 

list.stream().sorted();

à 

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

J'espère que cette aide!

3
David Pham

Votre flux n'a pas d'opérateur de terminal et n'est donc pas traité. Les opérateurs de terminaux incluent, sans s'y limiter: forEach, toArray, réduisent, collectent. Votre segment de code doit être similaire à

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