Java implementation of Alpha-numeric comparator

Remi Forax forax at univ-mlv.fr
Tue Dec 16 08:23:56 UTC 2014


On 12/16/2014 09:13 AM, Ivan Gerasimov wrote:
> Thanks Remi for the comments!
>
> As you and Roger suggested I only left a CharSequence variant of the 
> comparator.
>
> I also removed the custom Comparator<Character> altogether for now, 
> for the sake of simplicity.
> I guess for the purpose of a sample Character.compare(ch1, ch2) should 
> be good enough.
>
> Here's the updated webrev:
> http://cr.openjdk.java.net/~igerasim/XXXXXXX-AlphaNumeric/1/webrev/
>
> I'm not certain, why the comparator should be serializable.
> Could you please elaborate on this?

Yes, all public comparators in the JDK are serializable because 
otherwise people will not be able to serialize collections like TreeSet 
or ConcurrentSkipListSet that implement Serializable and take a 
comparator as an optional argument.


>
> Sincerely yours,
> Ivan

cheers,
Rémi

>
> 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.
>>>>
>>>> http://cr.openjdk.java.net/~igerasim/XXXXXXX-AlphaNumeric/0/webrev/
>>>>
>>>>
>>>> MSDN provides the function StrCmpLogicalW(), which can be used for 
>>>> similar sort order.
>>>> http://msdn.microsoft.com/en-us/library/windows/desktop/bb759947%28v=vs.85%29.aspx 
>>>>
>>>>
>>>> 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