我的课程定义如下......
public static class Connection implements Comparable<Connection>
这是我的compareTo方法。
@Override
public int compareTo(Connection o) {
List<String> combinations = new ArrayList<String>();
for(String lcp : LCP_ORDER){
for(String state : STATE_ORDER){
combinations.add(lcp + state);
}
}
int result = combinations.indexOf(this.lifecycle + this.connEditState) - combinations.indexOf(o.getLifecycle() + o.getConnEditState());
return result;
}
所以在输出上我会有..
this lcp = PR
this state = null
o lcp = AD
o state = null
result = 0
这不应该返回0,因为lcp是不同的。我需要一种方法来测试两个字符串的所有组合。建议?
答案 0 :(得分:3)
在combinations
列表中,您很可能不会添加两个值之一为null
的变体。
在您执行的测试中,状态为null
,因此无法找到该组合。在这两种情况下,对indexOf
的调用都会返回-1
,而- 1 - (-1)
会导致0
。
作为旁注:
compareTo
时都构建列表。lcp
与state
分隔开来,以避免冲突(lcp1 + state1 == lcp2 + state2
的情况,例如"ab" + "c" == "a" + "bc"
)如果这样的话存在风险。您可能甚至不需要构建组合列表,只需比较compareTo
和lcp
的索引即可实现state
方法分别为LCP_ORDER
和STATE_ORDER
:
@Override
public int compareTo(Connection o) {
int orderIndex = LCP_ORDER.indexOf(this.lifecyle)
- LCP_ORDER.indexOf(o.lifecyle);
if (orderIndex != 0) {
return orderIndex;
}
int stateIndex = STATE_ORDER.indexOf(this.connEditState)
- STATE_ORDER.indexOf(o.connEditState);
return stateIndex;
}