我使用 Guava 的Ordering
类来执行排序以从给定列表中选择“最佳”。它看起来像这样:
// Create the Ordering, with a list of Comparators
Ordering<String> ranker = Ordering.compound(ImmutableList.of(
STRING_LENGTH,
PERCENTAGE_UPPERCASE,
NUMBER_OF_VOWELS));
// Use the ordering to find the 'best' from a list of Strings
String best = ranker.max(asList("foo", "fooz", "Bar", "AEro"));
有了这个Ordering
,字符串 "AEro" 是最好的,因为它是最长的,与 "fooz" 并列最好,但大写字符的比例更高。
我正在寻找一种方法来判断哪个Comparator
“打破平局”,在这个愚蠢的人为示例中,哪个是比较器PERCENTAGE_UPPERCASE
。
我有一个可行的解决方案,但它不是特别优雅,并且意味着复制Comparator
s 列表。它是使用Ordering
提供一个排序列表(Ordering.sortedCopy
),拉出前两个元素(当然是范围检查),遍历相同Comparator
s 的 List,比较这两个元素,当compareTo
方法返回非零结果时中断。
有没有更简洁的方法?