我有一個類實現Comparator<String>
,它應該以這樣的方式對字符串進行排序,使得第一個字詞爲羅馬數字的字符串應該在不以羅馬數字開頭的字符串之前,並且如果兩個字符串都開始用羅馬文字,應該有兩種情況:使用Guava's ComparisonChain比較包含羅馬數字的字符串
- 排序的羅馬數字,然後如果等於由串
- 排序字符串的休息休息,不是羅馬數字
我萬特相同的,當d利用番石榴的ComparisonChain但遇到了兩個問題:
- 調試期間在Eclipse中我看不到有什麼ComparisonChain對象內(即便在ComparisonChain類是)。
comparisonChain.result()
在上面的第二個例子中,對於諸如「XI Something」,「III Something」等值的值(轉換爲long是OK - 我檢查了值)總是返回0(因爲問題#1,我無法檢查流)。
這裏有什麼問題?我可以使用上面的comparisonChain
這樣的對象(通過在一些像建設者一樣的變量中添加.compare
),不是嗎?
此代碼:
if (romanComparisionFirst) {
return ComparisonChain.start()
.compare(Roman.toLong(leftFirstWord), Roman.toLong(rightFirstWord))
.compare(WORDS_JOINER.join(leftWordsTail), WORDS_JOINER.join(rightWordsTail), collator)
.result();
} else {
return ComparisonChain.start()
.compare(WORDS_JOINER.join(leftWordsTail), WORDS_JOINER.join(rightWordsTail), collator)
.compare(Roman.toLong(leftFirstWord), Roman.toLong(rightFirstWord))
.result();
}
這:
final ComparisonChain comparisionChain = ComparisonChain.start();
if (romanComparisionFirst) {
comparisionChain
.compare(Roman.toLong(leftFirstWord), Roman.toLong(rightFirstWord))
.compare(WORDS_JOINER.join(leftWordsTail), WORDS_JOINER.join(rightWordsTail), collator);
} else {
comparisionChain
.compare(WORDS_JOINER.join(leftWordsTail), WORDS_JOINER.join(rightWordsTail), collator)
.compare(Roman.toLong(leftFirstWord), Roman.toLong(rightFirstWord));
}
return comparisionChain.result();
得到不同的結果 - 第一種情況是好的,第二個總是0,所以問題是:我可以使用ComparisonChain
如果第二齣樣或者這種行爲是一個錯誤?
不是一個真正的答案(JB是完全正確的),但我可以建議有兩個單獨的排序 - 一個羅馬人的話,另一個是尾巴? – Ray