- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有类实现 Comparator<String>
它应该以这样的方式对字符串进行排序,即第一个单词是罗马数字的字符串应该在不以罗马数字开头的字符串之前,并且如果两个字符串都以罗马文字开头,则应该有两种情况:
我想使用 Guava 的 ComparisonChain但是遇到了两个问题:
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(...);
关于java - 使用Guava的ComparisonChain比较包含罗马数字的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8480946/
我正在使用 com.google.common.collect.ComparatorChain 为不同的对象实现自定义比较器。 现在,以下测试失败了,但为什么? @Test public void c
Guava 中的比较链是否不应该延迟评估比较?在下面的代码中,NullComparator (apache) 将返回一个非零值,链是否应该终止? 来自docs :一旦其中一个返回非零结果,Compar
我正在将一些代码从 Java 转换为 JavaScript,并且遇到了以下代码: static final Comparator compareXCoord = new Comparator() {
我有一个包含多个字段的 ComplexObject,我想这样说: 如果两者都存在字段 x,则继续比较链中的下一个 compare。 如果两者都为空,则继续进行比较链中的下一个compare。 如果一个
我刚刚开始使用 google 的 Guava 集合(ComparisonChain 和 Objects)。在我的 pojo 中,我覆盖了 equals 方法,所以我首先这样做了: return Com
我是一名优秀的程序员,十分优秀!