有没有人知道Java Comparators库?

时间:2011-05-21 11:22:50

标签: java comparator

我正在追踪一个包含许多有用的比较器实现的化石库,它有许多可靠的无聊的比较器。

Apache commons comparators

  • 逆转
  • null first / null last
  • 自然
  • 变压器

还有许多其他有用的可重复使用的可能性。

  • 空白忽略
  • 空格正常化
  • 数字感知字符串 - 例如“apple 10”> “苹果2”。

@SPF 我已经包含了一些伪代码,它们显示了如何在一次传递中进行规范化和比较而不创建任何临时字符串等。虽然它未经测试且可能无法工作,但它不会花费太多时间进行快速比较。

while {

   while
        get next char from $string1
        if none left then
           $string1 > $string2 return +1;
        get next char from $string1
        increase $index1
        if previous was whitespace and this is whitespace then
           continue;
        end if
   end while

   while
    get next char from $string2
    if none left then
       $string2 > $string1 return +1;
    get next char from $string2
    increase $index2
    if previous was whitespace and this is whitespace then
       continue;
    end if
   end while

   result = $char1 - $char2
   if result != 0 return
}

2 个答案:

答案 0 :(得分:5)

我认为你不会得到很多现成的比较器,但是GuavaOrdering类,它们都扩展了比较器的功能,并添加了一些有用的默认实现作为工厂方法

而且:GuavaApache Commons / Lang(我说过)会帮助您分别使用CompareToBuilderComparisonChain来实现自定义比较器或可比较器。我担心它没有那么好。


关于这些要求:

  

还有许多其他有用的可重复使用的可能性。

     
      
  • 空白忽略
  •   
  • 空格正常化
  •   
  • 数字感知字符串 - 例如“apple 10”> “苹果2”。
  •   

在比较器中执行此操作并不明智,因为这意味着您的未修改数据仍保留在集合中,并且Comparator需要为每次比较进行两次所需的转换。现在想想用几百万个条目对数组进行排序。需要多少个字符串转换?

首先将数据标准化然后对其进行排序总是更明智。

答案 1 :(得分:1)

从3.0.2开始,Commons Lang将在org.apache.commons.lang3.compare包中提供Collections比较器的副本。随意提出更多建议。