Java 8 Stream排序字符串列表

时间:2016-10-10 03:09:30

标签: java sorting java-8 java-stream

我在流上调用已排序的方法。而java doc说:

“Sorted方法返回一个由此流的元素组成的流,按照自然顺序排序。”

但是当我运行下面的代码时:

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

我的输出为

[b, a, z, p]

为什么我没有获得自然排序的输出?

4 个答案:

答案 0 :(得分:11)

更改此

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

类似

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

您的方法是打印list(不是已排序的流)。或者(或另外),您可以缩短初始化例程并重新收集List之类的

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

哪些输出(正如您可能预期的那样)

[a, b, p, z]

答案 1 :(得分:5)

您应该收集排序结果,然后将其分配到列表中。

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

答案 2 :(得分:3)

您的信息流没有终端运营商,因此未经过处理。终端运营商包括但不限于:forEach,toArray,reduce,collect。您的代码段应与

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

答案 3 :(得分:3)

如果您想要排序列表。

让我们改变这个

list.stream().sorted();

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

希望这有帮助!