我正在追踪一个包含许多有用的比较器实现的化石库,它有许多可靠的无聊的比较器。
Apache commons comparators
还有许多其他有用的可重复使用的可能性。
@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
}
答案 0 :(得分:5)
我认为你不会得到很多现成的比较器,但是Guava有Ordering
类,它们都扩展了比较器的功能,并添加了一些有用的默认实现作为工厂方法
而且:Guava和Apache Commons / Lang(我说过)会帮助您分别使用CompareToBuilder
和ComparisonChain
来实现自定义比较器或可比较器。我担心它没有那么好。
关于这些要求:
还有许多其他有用的可重复使用的可能性。
- 空白忽略
- 空格正常化
- 数字感知字符串 - 例如“apple 10”> “苹果2”。
在比较器中执行此操作并不明智,因为这意味着您的未修改数据仍保留在集合中,并且Comparator
需要为每次比较进行两次所需的转换。现在想想用几百万个条目对数组进行排序。需要多少个字符串转换?
首先将数据标准化然后对其进行排序总是更明智。
答案 1 :(得分:1)
从3.0.2开始,Commons Lang将在org.apache.commons.lang3.compare包中提供Collections比较器的副本。随意提出更多建议。