当我尝试使用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()
时也是如此。
答案 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值)。