我想排序一个简单的清单。 Integers
的示例:
List<Integer> numbers = Arrays.asList(4, 2, 7, 1, 4);
numbers.stream().sorted((n1, n2) -> {
System.out.println("comparing: " + n1 + " with " + n2);
return Integer.compare(n1, n2);
});
结果:没有打印出来!没有应用排序。 因此,甚至不执行排序方法。为什么呢?
旁注:我的目的是直接修改列表(在对象内),因此我试图阻止创建新列表。
答案 0 :(得分:6)
sorted()
不是终端操作,因此它不会执行Stream
管道。
您必须应用某些终端操作,例如.collect(Collectors.toList())
,以便执行排序(以及任何其他中间操作)。
List<Integer> sorted = numbers.stream().sorted((n1, n2) -> {
System.out.println("comparing: " + n1 + " with " + n2);
return Integer.compare(n1, n2);
}).collect(Collectors.toList());
如果要对原始列表进行排序而不创建新列表,请使用List
&#39; sort
方法:
numbers.sort((n1, n2) -> {
System.out.println("comparing: " + n1 + " with " + n2);
return Integer.compare(n1, n2);
});
当然,您并不需要传递Comparator
,因为您使用的是自然的Integer
顺序,如果您只是写一下,默认情况下会使用该顺序:
List<Integer> numbers = Arrays.asList(4, 2, 7, 1, 4);
numbers.sort (null);
System.out.println (numbers);
输出:
[1, 2, 4, 4, 7]
来自List
&#39; s sort
Javadoc:
如果指定的比较器为null,则此列表中的所有元素必须实现Comparable接口和元素&#39;应该使用自然排序。
答案 1 :(得分:2)
您可以直接在列表上使用排序方法
numbers.sort((n1,n2) -> n1.compareTo(n2));
答案 2 :(得分:1)
如果要修改列表,可以使用Collections.sort(List)
方法而不是使用流。
示例:
List<Integer> numbers = Arrays.asList(4, 2, 7, 1, 4);
Collections.sort(numbers);
System.out.println(numbers);