为什么排序操作将遭遇顺序强加给流?



排序操作的文档说:

对于有序流,排序是稳定的。对于无序流,不做稳定性保证。

页面摘要说:

某些中间操作(例如 sorted(((可能会施加遭遇顺序

有人可以解释为什么sorted操作需要对流的遭遇顺序(我没有看到遇到订单的存在与排序操作之间的关系(?

这是否意味着以下代码无效(因为 HashSet 不是内在排序的(?

Set<Integer> mySet = new HashSet<>();
mySet.add(10);
mySet.add(4);
mySet.add(20);
mySet.add(15);
mySet.add(22);
mySet.add(-3);
List<Integer> result = mySet.stream().sorted().collect(Collectors.toList());
System.out.println(result);

当我运行此代码时,它始终为我提供相同的输出[-3, 4, 10, 15, 20, 22]

如果我使用.parrallel()的事件,输出保持不变[-3, 4, 10, 15, 20, 22]

mySet.stream().parallel().sorted().collect(Collectors.toList());`

当我运行此代码时,它总是给我相同的输出

是的。它按预期对集合进行排序。看来你误解了"稳定"这个词。排序中的稳定性是指不移动相等的元素。

稳定的排序算法以与 它们出现在输入中

在维基百科上阅读更多内容

您的列表没有重复的元素,因此稳定性不适用,并且您无法通过观察输出来确定稳定性。

有人可以解释为什么排序操作需要遭遇顺序来 溪流

其实不然。这句话说,它可能会">强加遭遇令"。也就是说,在sort操作之后会有一个定义的遭遇顺序,而不是之前需要有一个。

最新更新