列表<条目<K,V>&GT; - 比这更标准的东西?</entry <k,v>

时间:2014-12-04 09:11:33

标签: java data-structures

我正在制作一个简单的单元测试器,我会迭代成对的(input, expected)值,并检查计算的actual值是否等于expected

这在一个简单的HashMap<INPUTTYPE, OUTPUTTYPE>中是完全可行的,但是哈希逻辑是没有意义的,因为我将迭代所有值,并且从不在地图中搜索,而保持测试用例的顺序(成对(input, expected))。

List<Entry<K,V>>似乎运行良好,但在List中使用Map的内部组件似乎并不好。创建Pair类来连接输入和期望也似乎不自然,因为Entry是相同的。

有没有办法在基础库中使用现有的java类来很好地支持这种数据?

2 个答案:

答案 0 :(得分:1)

简单的Pair可能是您的最佳选择:

/**
 * @author OldCurmudgeon
 * @param <P>
 * @param <Q>
 */
public class Pair<P extends Comparable<P>, Q extends Comparable<Q>> implements Comparable<Pair<P, Q>> {
  // Exposing p & q directly for simplicity. They are final so this is safe.
  public final P p;
  public final Q q;

  public Pair(P p, Q q) {
    this.p = p;
    this.q = q;
  }

  public P getP() {
    return p;
  }

  public Q getQ() {
    return q;
  }

  @Override
  public String toString() {
    return "<" + (p == null ? "" : p.toString()) + "," + (q == null ? "" : q.toString()) + ">";
  }

  @Override
  public boolean equals(Object o) {
    if (!(o instanceof Pair)) {
      return false;
    }
    Pair it = (Pair) o;
    return p == null ? it.p == null : p.equals(it.p) && q == null ? it.q == null : q.equals(it.q);
  }

  @Override
  public int hashCode() {
    int hash = 7;
    hash = 97 * hash + (this.p != null ? this.p.hashCode() : 0);
    hash = 97 * hash + (this.q != null ? this.q.hashCode() : 0);
    return hash;
  }

  @Override
  public int compareTo(Pair<P, Q> o) {
    int diff = p == null ? (o.p == null ? 0 : -1) : p.compareTo(o.p);
    if (diff == 0) {
      diff = q == null ? (o.q == null ? 0 : -1) : q.compareTo(o.q);
    }
    return diff;
  }

}

答案 1 :(得分:0)

如果您不想创建任何新类,您可以使用2个数组并将expected [i]与actual [i]进行比较,因为核心java中没有标准元组/对。