我有一个包含具有 4 个参数(x、y、iD 和 myType)的对象的 ArrayList。我想验证此 ArrayList 中是否存在具有特定坐标的对象,独立于它们的 iD 和 myType 参数。我想使用Arrays.asList(yourArray).contains(yourValue)但它是当对象只有一个参数时。
这是整个代码:
public class MyObject {
public float x;
public float y;
public int iD;
public String myType;
public MyObject (float x, float y, int iD, String myType)
{
this.myType = myType;
this.iD = iD;
this.x = x;
this.y = y;
}
@Override
public String toString() {
return ("[iD="+iD+" x="+x+" y="+y +" type="+myType+"]");
}
}
ArrayList<MyObject> myArrayList = new ArrayList<MyObject>();
void setup()
{
size(100, 60);
myArrayList.add(new MyObject(3.5, 4.5, 6, "a"));
myArrayList.add(new MyObject(5.4, 2.6, 4, "b"));
}
Run Code Online (Sandbox Code Playgroud)
例如,如果我想验证是否存在具有坐标 (3.5, 4.5) 的对象,我应该如何进行?是否有捷径可寻 ?
感谢您的帮助
List#contains(Object)状态的 javadoc
如果此列表包含指定的元素,则返回 true。
这不是你在这里想要做的。您不是在指定元素,而是要指定元素的属性。不要使用这种方法。
长形式的解决方案是迭代 中的元素List并单独检查它们,true一旦找到,或者false当你用完元素时就返回。
public boolean findAny(ArrayList<MyObject> myArrayList, float targetX) {
for (MyObject element : myArrayList) {
if (element.x == targetX) { // whatever condition(s) you want to check
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
从 Java 8 开始,有一种更好的方法可以使用Stream#anyMatch(Predicate)which
返回此流的任何元素是否与提供的谓词匹配。
给定Predicate的只是对您正在寻找的属性的测试
return myArrayList.stream().anyMatch((e) -> e.x == targetX);
Run Code Online (Sandbox Code Playgroud)
关于浮点值的相等性检查,请参阅以下内容: