如何在遍历另一个 hashSet Java 的 foreach 循环中比较 hashSet
How to compare a hashSet within a foreach loop iterating through another hashSet Java
我正在 运行 进行测试,看看我输入到文件中的值是否与我从 API 生成的值相同。所以我有从我的 API 生成的实际值,我还有另一个预期值列表。我遇到的问题是我无法进行同类比较。
示例:
Actual = {red, bleu, yellow, purple}
expected = {bleu, red, purple, yellow}
failure: red != bleu, bleu != red, yellow != purple, purple != yellow
除了向您展示我的代码之外,我不确定还有什么其他方法可以更好地描述我所说的内容。
这是我的代码:
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);
}
}
如何在 1 个 foreach 循环或等效循环中比较这些列表?任何帮助或协助将不胜感激。
编辑:
Iterator<String> expectation = expectedList.iterator();
Iterator<String> actuation = actualList.iterator();
while((expectation.hasNext()) && (actuation.hasNext())) {
String exp = expectation.next();
String act = actuation.next();
logger.info("Expected: "+exp);
logger.info("Actual: "+act);
// Validation check
if ( !exp.equals(act)) {
error+= "\nExpected : " + exp +"\nActual: " +act+"\n";
success = false;
} if ( !success ) Assert.fail(error);
}
顺序很重要,所以这会失败...
您可以使用
Set.contains(value)
检查实际值是否在预期值内,只需要一个for循环即可实现
看到这个
http://docs.oracle.com/javase/7/docs/api/java/util/Set.html#contains(java.lang.Object)
这个问题太奇怪了。在标题中你说 HashSet
与 HashSet
比较,在你使用的内容中使用 TreeSet
。
从问题来看,您似乎有 Set
个实际结果,并且您想与 Set
个预期结果进行比较,而不管迭代顺序如何,对吗?
用contains
肯定是错的,用iterator做比较也是如此
解决方案实际上是straight-forward。来自 Set
的 javadoc:
boolean equals(Object o)
Compares the specified object with this set for equality. Returns true
if the specified object is also a set, the two sets have the same
size, and every member of the specified set is contained in this set
(or equivalently, every member of this set is contained in the
specified set). This definition ensures that the equals method works
properly across different implementations of the set interface.
你需要做的很简单
expectedResultSet.equals(actaulResultSet)
我正在 运行 进行测试,看看我输入到文件中的值是否与我从 API 生成的值相同。所以我有从我的 API 生成的实际值,我还有另一个预期值列表。我遇到的问题是我无法进行同类比较。
示例:
Actual = {red, bleu, yellow, purple}
expected = {bleu, red, purple, yellow}
failure: red != bleu, bleu != red, yellow != purple, purple != yellow
除了向您展示我的代码之外,我不确定还有什么其他方法可以更好地描述我所说的内容。
这是我的代码:
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);
}
}
如何在 1 个 foreach 循环或等效循环中比较这些列表?任何帮助或协助将不胜感激。
编辑:
Iterator<String> expectation = expectedList.iterator();
Iterator<String> actuation = actualList.iterator();
while((expectation.hasNext()) && (actuation.hasNext())) {
String exp = expectation.next();
String act = actuation.next();
logger.info("Expected: "+exp);
logger.info("Actual: "+act);
// Validation check
if ( !exp.equals(act)) {
error+= "\nExpected : " + exp +"\nActual: " +act+"\n";
success = false;
} if ( !success ) Assert.fail(error);
}
顺序很重要,所以这会失败...
您可以使用
Set.contains(value)
检查实际值是否在预期值内,只需要一个for循环即可实现
看到这个
http://docs.oracle.com/javase/7/docs/api/java/util/Set.html#contains(java.lang.Object)
这个问题太奇怪了。在标题中你说 HashSet
与 HashSet
比较,在你使用的内容中使用 TreeSet
。
从问题来看,您似乎有 Set
个实际结果,并且您想与 Set
个预期结果进行比较,而不管迭代顺序如何,对吗?
用contains
肯定是错的,用iterator做比较也是如此
解决方案实际上是straight-forward。来自 Set
的 javadoc:
boolean equals(Object o)
Compares the specified object with this set for equality. Returns true if the specified object is also a set, the two sets have the same size, and every member of the specified set is contained in this set (or equivalently, every member of this set is contained in the specified set). This definition ensures that the equals method works properly across different implementations of the set interface.
你需要做的很简单
expectedResultSet.equals(actaulResultSet)