2014-12-04 2 views
0

Я делаю простой блок тестера, где i итерации по парам значений (input, expected), и проверьте, рассчитано ли значение actualexpected.Список <Entry<K,V>> - что-нибудь более стандартное, чем это?

Это прекрасно выполнимо в простой HashMap<INPUTTYPE, OUTPUTTYPE>, но логика хэша бессмысленна, так как я собираюсь перебирать все значения и никогда не искать на карте, хотя было бы неплохо сохранить порядок тестовых случаев (пары (input, expected)).

A List<Entry<K,V>>, похоже, работает хорошо, но, похоже, не так просто использовать внутренний компонент Карты в списке. Также кажется неестественным создать класс Pair для подключения ввода и ожидания, поскольку Entry - это одно и то же.

Есть ли способ использовать существующие классы Java в базовых библиотеках, которые поддерживают этот вид данных очень хорошо?

+0

карта, вероятно, * не * то, что вы хотите; что, если есть несколько тестов с одинаковым ожидаемым значением? –

+0

Насколько вы хотите, создать класс записи легко. Я думаю, что естественно создать свой собственный класс входа. – javaHunter

+1

Почему бы просто не использовать «LinkedHashMap»? –

ответ

0

Вы можете использовать 2 массива и сравнить ожидаемые [i] с фактическим [i], если вы не хотите создавать новый класс, поскольку в ядре Java нет стандартного набора Tuple/Pair.

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; 
    } 

} 
Смежные вопросы