排序方式不同?

时间:2018-10-18 15:46:26

标签: java java-8

当我尝试使用Comparator.naturalOrder()对字符串数组/列表进行排序时,它不遵守列表的自然顺序。这是我使用的代码段:

String[] arrays = { "This", "is", "the", "natural" ,"order"};

List< String > ordered = Arrays.asList( arrays );

System.out.println( "Natural order----" );

ordered.forEach( System.out::println );

ordered.sort(Comparator.naturalOrder( ));

System.out.println( "After ordering----" );

for ( String string: ordered ) {
    System.out.println( string );
}

输出:

Natural order----
This
is
the
natural
order

After ordering----
This
is
natural
order
the

Comparator.naturalOrder()为什么会这样?我尝试Comparator.reverseOrder()时也是如此。

2 个答案:

答案 0 :(得分:6)

naturalOrder表示根据 Comparator或纯字符串比较顺序,不是源的相遇顺序。这些是完全不同的东西。

可能是Integer的流会更容易理解:

Stream.of(3,4,1,2)...

遇到的订单是3, 4, 1, 2

排序顺序为1, 2, 3, 4-表示自然排序(通过Comparator.naturalOrder()

答案 1 :(得分:1)

naturalOrder()返回一个Comparator,以自然顺序比较Comparable个对象。

在您的示例中,它按字典顺序比较集合的条目。 (u 为每个字母输入ASCII值)。