当前位置: 首页 > 知识库问答 >
问题:

java-包含但具有特定参数

齐鹏程
2023-03-14

我有一个关于java中“contains”方法的问题。我有一个对象平铺,包括int x、int y(坐标)和string。我想向队列中添加对象,但不重复。当我说重复的时候,我指的是坐标。我不在乎绳子。

但是当我写这样的东西时:

for (Tile x : neighbours)
{
    if (!queue.contains(x))
        queue.add(x);
}

这是“全部相加”,我猜他看到一个参数(字符串)不相等,因此他将x放入队列。

你知道我如何只根据坐标将新对象放入队列吗?两个坐标相同但字符串不同的对象对我来说是同一个对象。

谢谢

共有3个答案

宗晟
2023-03-14

如果你想使用一些“魔法”,那么你可以考虑以下测试:

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给出的答案

鲍建业
2023-03-14

我已经做了这个功能。我觉得有一个简短的“魔法”。

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

不管怎样谢谢你。。。。

谢誉
2023-03-14

要检查与属性匹配的元素,在不相等的情况下,使用循环可能是最简单的。但是,如果您想使用单个方法,您可以将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语句。有没有更短的方法可以做