私は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
ます。
私には実行可能な解決策がありますが、それは特にエレガントではなく、sのリストを複製することを意味しComparator
ます。を使用しOrdering
て、ソートされたリスト(Ordering.sortedCopy
)を提供し、最初の2つの要素をプルし(もちろん範囲チェック)、同じComparator
sのリストを反復処理し、これら2つの要素を比較し、compareTo
メソッドがゼロ以外の結果を返すと中断します。
きちんとした方法はありますか?