compareTo not working - 测试两个字符串的所有组合

时间:2014-10-23 01:17:25

标签: java

我的课程定义如下......

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是不同的。我需要一种方法来测试两个字符串的所有组合。建议?

1 个答案:

答案 0 :(得分:3)

combinations列表中,您很可能不会添加两个值之一为null的变体。

在您执行的测试中,状态为null,因此无法找到该组合。在这两种情况下,对indexOf的调用都会返回-1,而- 1 - (-1)会导致0


作为旁注:

  1. 如果可能,您可能希望将组合存储为常量,而不是每次调用compareTo时都构建列表。
  2. 您可能希望将lcpstate分隔开来,以避免冲突(lcp1 + state1 == lcp2 + state2的情况,例如"ab" + "c" == "a" + "bc")如果这样的话存在风险。
  3. 您可能甚至不需要构建组合列表,只需比较compareTolcp的索引即可实现state方法分别为LCP_ORDERSTATE_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;
    }