Java implementation of Alpha-numeric comparator

Ivan Gerasimov ivan.gerasimov at
Tue Dec 16 08:13:47 UTC 2014

Thanks Remi for the comments!

As you and Roger suggested I only left a CharSequence variant of the 

I also removed the custom Comparator<Character> altogether for now, for 
the sake of simplicity.
I guess for the purpose of a sample, ch2) should 
be good enough.

Here's the updated webrev:

I'm not certain, why the comparator should be serializable.
Could you please elaborate on this?

Sincerely yours,

On 16.12.2014 2:39, Remi Forax wrote:
> Hi Ivan, hi Roger,
> Roger, the API already exists it's the interface Comparator.
> I agree with Roger that a comparator that use a CharSequence is better 
> that the one that use a char array.
> The thing that worry me is the Comparator<Character> taken as 
> parameter, it means that
> each time the method compare() is called on this comparator, the two 
> arguments are boxed.
> Minor comment, to be included, I think that these comparators should 
> be serializable
> and in my opinion the best way to do that is to use a lambda instead 
> of a class.
> Rémi
> On 12/15/2014 11:31 PM, roger riggs wrote:
>> Hi Ivan,
>> It does seem like a useful function, though I would have started with 
>> the API,
>> not the implementation.
>> Can it apply to CharSequence not only String and maybe skip the
>> separate char[] version, a char[] array can be wrapped to become a 
>> CharSequence via CharBuffer.
>> Or a via a new static method to define a CharSequence from a char array.
>> $.02, Roger
>> On 12/15/2014 5:53 AM, Ivan Gerasimov wrote:
>>> Hello everyone!
>>> In certain situations the preferred way of sorting strings is a 
>>> combination of char-comparing sorting with numeric sorting, where 
>>> applicable.
>>> List of strings sorted this way often look more natural to the human 
>>> eyes:
>>> { "alpha",
>>>   "java1",
>>>   "java2",
>>>   "java10",
>>>   "zero" }
>>> Here's presented a sample implementation of the comparator, which 
>>> supports this way of sorting.
>>> I placed it under src/sample directory.
>>> MSDN provides the function StrCmpLogicalW(), which can be used for 
>>> similar sort order.
>>> The differences are:
>>>  - case-sensitivity (StrCmpLogicalW is case-insensitive);
>>>  - treating leading zeroes;
>>>  - more accurate handling of strings with big numbers, which cannot 
>>> be converted to int/long.
>>> I guess this comparator may become particularly useful when we'll 
>>> have 'java10' and update releases/build numbers > 99 in the lists :)
>>> I want to ask the community about how useful this comparator may be 
>>> to you?
>>> Sincerely yours,
>>> Ivan

More information about the core-libs-dev mailing list