When I try to sort a string array/list using Comparator.naturalOrder() it does not respect the natural order of list. Here's the snippet I used :
List< String > ordered = Arrays.asList( "This", "is", "the", "natural" ,"order");
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 );
}
Output:
Natural order
This
is
the
natural
order
After ordering
This
is
natural
order
the
Why is Comparator.naturalOrder() behaving such way? Same is the case when I try Comparator.reverseOrder().
naturalOrder means according to Comparator or plain String comparison order, not source's encounter order. These are totally different things.
May be a Stream of Integer would be easier to understand:
Stream.of(3,4,1,2)...
encounter order is 3, 4, 1, 2
sorted order is 1, 2, 3, 4 - meaning naturally sorted (via Comparator.naturalOrder())
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With