我com.google.common.collect.ComparatorChain用来为不同的对象实现自定义比较器。
现在,以下测试失败,但是为什么呢?
@Test
public void chainTest() {
ComparisonChain comparator = ComparisonChain.start()
.compare("a", "a");
assertTrue(comparator.result() == 0);
comparator.compare("a", "b");
assertTrue(comparator.result() != 0); //fails with AssertionError
}
Run Code Online (Sandbox Code Playgroud)
Afaik的第二结果实际上应该!= 0是a != b?
我当然可以像这样重新分配比较器:
comparator = comparator.compare("a", "b");
但这将丢弃重新分配前获得的任何结果。
您忽略的返回值comparator.compare("a", "b")。调用compare()不会更改现有比较的状态-它会返回具有正确状态的比较(可能相同也可能不相同-只要比较结果为0,状态将为“活动”)。
更改代码以使用:
comparator = comparator.compare("a", "b");
Run Code Online (Sandbox Code Playgroud)
它应该工作。
这个想法是,您只是不断将比较传递给链,一旦知道整体结果(即其中一个非零时),它将忽略它们。例如:
import com.google.common.collect.ComparisonChain;
public class Test {
public static void main(String[] args) {
int result = ComparisonChain.start()
.compare("a", "b") // Chain terminates here
.compare("a", "a") // Irrelevant
.result();
System.out.println(result); // < 0 (e.g. -1)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |