Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lambda'中的排序();它没有按预期工作-Java 8_Java_Sorting_Lambda_Java 8 - Fatal编程技术网

lambda'中的排序();它没有按预期工作-Java 8

lambda'中的排序();它没有按预期工作-Java 8,java,sorting,lambda,java-8,Java,Sorting,Lambda,Java 8,在学习lambda的方法时,我发现排序方法并没有按预期的方式工作 下面的程序将[1,33,2,4,5,11]作为输出,但我希望得到排序后的输出 奇怪的是,当我将[33,2,1,4,5,11]替换为[3,1,2,4,5]时,每件事情都正常工作,我得到了预期的排序输出 public class Test { public static void main(String[] args) { List<Integer> list = Array

在学习lambda的方法时,我发现排序方法并没有按预期的方式工作

下面的程序将
[1,33,2,4,5,11]
作为输出,但我希望得到排序后的输出

奇怪的是,当我将
[33,2,1,4,5,11]
替换为
[3,1,2,4,5]
时,每件事情都正常工作,我得到了预期的排序输出

public class Test {
            public static void main(String[] args) {
            List<Integer> list = Arrays.asList(33, 2, 1, 4, 5, 11);
            Set<Integer> set = list.stream().sorted().collect(Collectors.toSet());
            System.out.println(set);
        }
      }
公共类测试{
公共静态void main(字符串[]args){
List=Arrays.asList(33,2,1,4,5,11);
Set Set=list.stream().sorted().collect(Collectors.toSet());
系统输出打印项次(套);
}
}

请帮助我了解此行为。

您应该收集到
集合
,该集合保留了角色中
哈希集
的顺序,而
toSet
的默认实现不会:

.collect(Collectors.toCollection(LinkedHashSet::new))

但是为什么它对3,1,2,4,5’有效呢。。。运气。或者更准确地说,是一种确定性但偶然的排序,它决定了
Integer:hashCode
的计算方式+填充(默认)
HashSet
的方式。@Joker这可能只是一个巧合,与Stephen所指出的整数的hashCode实现事实一致。对于一个这样的实验,您可以使用输入
3,1,2,4,5
删除
sorted
操作,并验证输出是否与
sorted
操作保持相同。