gpt4 book ai didi

java - 使用Guava的ComparisonChain比较包含罗马数字的字符串

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:41:48 24 4
gpt4 key购买 nike

我有类实现 Comparator<String>它应该以这样的方式对字符串进行排序,即第一个单词是罗马数字的字符串应该在不以罗马数字开头的字符串之前,并且如果两个字符串都以罗马文字开头,则应该有两种情况:

  1. 按罗马数字排序,如果相等则按其余字符串排序
  2. 按字符串的其余部分排序,如果等于罗马数字

我想使用 Guava 的 ComparisonChain但是遇到了两个问题:

  1. 在 Eclipse 中进行调试期间,我看不到 ComparisonChain 对象中的内容(即使在 ComparisonChain 类中也是如此)。
  2. comparisonChain.result()在上面的第二个示例中,对于“XI Something”、“III Something”等值,总是返回 0(由于问题 #1,我无法检查流程)(转换为 long 没问题 - 我检查了值)。

这里有什么问题?我可以使用 comparisonChain像上面这样的对象(通过创建变量并在一些 ifs 中添加 .compare s,就像构建器一样),我不能吗?

这段代码:

  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如第二种情况所示,或者此行为是错误吗?

最佳答案

ComparisonChain 的每个compare 方法都返回一个ComparisonChain,它不一定是调用比较的链。第一个片段没有忽略结果(因此是正确的),但第二个片段忽略了结果,因此是不正确的。

如果是这样就对了:

comparisionChain = comparisionChain.compare(...).compare(...);

参见 http://docs.guava-libraries.googlecode.com/git-history/v10.0.1/javadoc/src-html/com/google/common/collect/ComparisonChain.html#line.89获取源代码。

关于java - 使用Guava的ComparisonChain比较包含罗马数字的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8480946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com