如何比较foreach循环中的hashSet迭代另一个hashSet Java

时间:2015-11-08 07:37:06

标签: java collections foreach conceptual

我正在运行测试,看看我输入文件的值是否与我从API生成的值相同。所以我有从我的API生成的实际值,我有另一个预期值列表。我遇到的问题是我无法将苹果与苹果进行比较。

示例:

from itertools import *
from collections import *

s = [5, 7, 9, 12, 6]
m = 15

c = Counter(s)
u = list(c)
ul = len(u)
t = [c[x] for x in u]
p = product(*[xrange(i+1) for i in t])
e = ([a for b in [[u[i]] * x[i] for i in range(ul)] for a in b] for x in p)
r = [n for n in e if sum(n) == m]

print r

我不知道除了向你展示我的代码之外,还有什么方法可以更好地描述我所说的内容。

这是我的代码:

Actual = {red, bleu, yellow, purple}
expected = {bleu, red, purple, yellow}

failure: red != bleu, bleu != red, yellow != purple, purple != yellow 

如何在1个foreach循环或同等范围内比较这些列表?任何帮助或协助将不胜感激。

编辑:

TreeSet<String> hashSet = (TreeSet<String>) calcGraph.getInputs();
boolean success = true;
String error="";

for(String xpath : hashSet) {

    String actual = someApi(response, expression, xpath);

    for ( String values : data.getDataOutputs().keySet() ) {
        String expected = data.getDataOutputs().get(expectedXpath);

        if ( !expected.equals(actual)) {
            error+= "\nExpected : " + expected +"\nActual: " +actual+"\n";
            success = false;
        } if ( !success ) Assert.fail(error);

    }
}

订单很重要,所以这会失败......

2 个答案:

答案 0 :(得分:0)

这个问题太奇怪了。在标题中,您说HashSetHashSet比较,以及您使用的内容TreeSet

从问题来看,您似乎有Set的实际结果,并且您希望与预期结果的Set进行比较,无论迭代顺序如何,我是对的吗?

使用contains肯定是错误的,并且使用迭代器进行比较。

解决方案实际上是直截了当的。来自Set的javadoc:

  

boolean equals(Object o)

     

将指定对象与此集进行相等性比较。返回true   如果指定的对象也是一个集合,则两个集合具有相同的值   size,并且指定集的每个成员都包含在此集合中   (或者等效地,该组的每个成员都包含在   指定的集合)。此定义确保equals方法有效   正确地跨越集合接口的不同实现。

您需要做的只是

expectedResultSet.equals(actaulResultSet)

答案 1 :(得分:-2)

您可以使用

Set.contains(value)

要检查实际值是否在预期值中,您只需要一个for循环来实现此目的

见这个

http://docs.oracle.com/javase/7/docs/api/java/util/Set.html#contains(java.lang.Object)