我有一个关于java中“contains”方法的问题。我有一个对象平铺,包括int x、int y(坐标)和string。我想向队列中添加对象,但不重复。当我说重复的时候,我指的是坐标。我不在乎绳子。
但是当我写这样的东西时:
for (Tile x : neighbours)
{
if (!queue.contains(x))
queue.add(x);
}
这是“全部相加”,我猜他看到一个参数(字符串)不相等,因此他将x放入队列。
你知道我如何只根据坐标将新对象放入队列吗?两个坐标相同但字符串不同的对象对我来说是同一个对象。
谢谢
如果你想使用一些“魔法”,那么你可以考虑以下测试:
for (Tile x : neighbours) {
if (!queue.contains(new Object() {
public boolean equals(Object t) {
return x.x == ((Tile) t).x && x.y == ((Tile) t).y;
}
})) {
queue.add(x);
}
}
其中,我不会将给定的Tilet
传递给contains
方法,而是传递一个带有被覆盖的equals
方法的对象
实例。这是有效的,因为包含
接受任何类型的对象。
然而,从程序逻辑来看,这个版本相当于@Joe给出的答案
我已经做了这个功能。我觉得有一个简短的“魔法”。
public static boolean containsCoordinates (LinkedList<Tile> queue, Tile obj)
{
for (Tile queueTile : queue)
{
if (queueTile.getX()==obj.getX())
{
if (queueTile.getY()==obj.getY())
return true;
}
}
return false;
}
不管怎样谢谢你。。。。
要检查与属性匹配的元素,在不相等的情况下,使用循环可能是最简单的。但是,如果您想使用单个方法,您可以将lambda作为谓词传递给anyMatch
:
for (Tile x : neighbours) {
if (!queue.stream().anyMatch(t -> x.x == t.x && x.y == t.y)) {
queue.add(x);
}
}
如果集合包含具有特定属性值的元素,我想断言(使用JUnit,而不是任何其他依赖项,如hamcrest)。 我发现这个问题如何断言迭代包含具有特定属性的元素?使用危害冠。 一种选择是重写< code>equals方法,只检查我想要比较的属性,但这不是一个好的解决方案。 有没有一种优雅的方法可以使用JUnit 4来实现这一点,或者我应该对其进行编码并循环访问集合以检查值?
假设我想用这个签名对一个方法进行单元测试: 假设是一个具有许多属性的Pojo,其中一个属性是,通过访问。 我所关心的只是验证
我有一个非常奇怪的问题,很简单,但我不明白问题是什么。 我有一个类,ClassA调用ClassB中的函数,比如- 类A是在我的applicationContext中定义的bean。类xml ClassB中的函数定义看起来像 IntelliJ没有指出任何语法问题,一切看起来都很正常。。。然而,当我试图编译时,Maven出现了一个异常 B类与a类位于不同的模块中,因此B类位于a类的pom中。作为依赖项
问题内容: 我有一个像这样的值: 给定,有没有一种很好的方法来测试是否包含? 问题答案: 警告:这不适用于图元数组(请参见注释)。 从开始,你现在可以使用。 要检查的阵列是否,或包含一个值使用或分别。 例
问题内容: 如何确定在Java数组中是否包含特定值? 问题答案: 从java-8开始,你现在可以使用Streams。 要检查的阵列是否int,double或long包含一个值使用IntStream,DoubleStream或LongStream分别。 例 Java SE 9的简要更新 引用数组不好。对于这种情况,我们要紧紧追赶。从Java SE 9开始,我们有了。 “给出String,是否有测试V
问题内容: 我想选择不具有VAL =’current’的任何行的唯一ID(与多行关联)。 例如,在这样的表中: 我希望它返回ID 23,因为它没有VAL =’current’的行。请注意,在此表中,主键(PK)是唯一的,但ID不是唯一的(因此需要使用DISTINCT或GROUP BY)。 这是我在PHP中拥有的东西: 这就是它的总要旨。如您所见,完成此任务需要两个SQL语句。有没有更短的方法可以做