我想检查两个列表(比方说,ArrayList)是否有完全相同的实例类,基于预期的列表。为此,我构建了下一个方法,但我想知道是否有另一种使用某些库的奇特方法,比如assertJ。
private void assertConcreteTypes(List actual, List expected) {
for (int i = 0; i < actual.size(); i++){
assertThat(actual.get(i)).isExactlyInstanceOf(expected.get(i).getClass());
}
}
任何建议都是非常受欢迎的。谢谢
您可以创建自定义Assertj断言器和可用于断言类型的自定义断言器。
class TypeAssert extends AbstractAssert<TypeAssert, List<?>> {
public TypeAssert(List<?> actual) {
super(actual, TypeAssert.class);
}
public TypeAssert hasExactlySameType(List<?> expected) {
isNotNull();
for (int i = 0; i < actual.size(); i++) {
if (!actual.get(i).getClass().equals(expected.get(i).getClass())) {
failWithMessage("Expected [%s]th element to be of type: %s but was of type: %s",
i, expected.get(i).getClass(), actual.get(i).getClass());
}
}
return this;
}
}
您需要一个静态方法来公开我们的自定义导出器的对象。
class Assertions {
// static factory method which exposes custom asserted
static TypeAssert assertThat(List<?> actual) {
return new TypeAssert(actual);
}
}
然后可以使用上述方法进行基于类型的断言。
List<Object> actual = List.of(new Employee());
List<Object> expected = List.of(new StringBuilder());
Assertions.assertThat(actual).hasExactlySameType(expected);
如果您仅在1或2个位置基于类型进行断言,那么我认为您提到的方法更加清晰易读。但是,如果您需要在多个地方创建这样的断言,那么我建议您创建一个自定义断言器。
您需要考虑不同大小的列表以及列表中的空元素。
这似乎相当易读,并迎合了这些边缘情况:
private void assertConcreteTypes(List actual, List expected) {
assertEquals(classes(expected), classes(actual));
}
private List<Class<?>> classes(List<Object> list) {
return list.stream().map(v -> v == null ? null : v.getClass()).collect(Collectors.toList());
}
输出:[A,B,C,D,E,F,G,H,I,J,K,L]
我有一个算法包含以下情况;我想知道是否有可能有所改进(我认为不可能,但我可能错了)。 我有一个对象列表。我有两个不同的(独立的)键来对它们进行排序:和。实际上,我可以在算法开始时以两种方式对列表进行排序,而无需花费大量成本;因此,我有两份清单: (Python语法,但我认为任何人都能理解)。在这个阶段,只要复杂性保持在O(nlogn)以下,我完全可以做更多的事情(初始化新变量)。 我需要提取的许多
每个人如何检查两个堆栈是否具有相同的值? 例如,在stack1中我有[1,3,4,5],在stack2中我有[4,3,1,5],因此堆栈具有相同的值,并且Method需要返回true。 此外,堆栈必须(最终)与给定的堆栈相同(具有原始值和相同的顺序)。 我已经开始做了,但不幸的是,效果不好: 提前谢谢。
我正在运行以下JOOQ查询: table和joinTable都有id作为主键名称,但最终获取实体类包含joinTable的id和table的其余列。如果我重新排序表,结果相似,我有表的ID和joinTable的其余列。
问题内容: 我有两个表,它们的定义如下: 和这里代表。 我做了一个简单的本地SQL只能加入到选择和为: 但是我在行上遇到异常: 堆栈跟踪 : 您能建议出什么事了吗? 问题答案: 您需要设置结果别名。
问题内容: 很抱歉这个简单的问题,但是我很难找到答案。 当我比较2个列表时,我想知道它们是否“相等”,因为它们具有相同的内容,但是顺序不同。 例如: 我想评估。 问题答案: 您可以简单地检查带有x和y元素的多重集是否相等: 这要求元素是可哈希的。运行时将位于中,其中列表大小。 如果元素也是唯一的,则还可以转换为集合(相同的渐近运行时,在实践中可能会快一点): 如果元素不是可哈希的,而是可排序的,则