我在流上调用已排序的方法。而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]
为什么我没有获得自然排序的输出?
答案 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));
希望这有帮助!