gpt4 book ai didi

javafx-2 - ObservableList#contains() 为现有项目返回 false

转载 作者:行者123 更新时间:2023-12-04 04:49:19 26 4
gpt4 key购买 nike

我尝试使用 OberservableLists contains 函数来检查给定元素是否已经在列表中,如果没有添加它。
我的代码看起来像:

ObservableList<Device> devicesScannerList = FXCollections.observableArrayList()
deviceScannerList.add((Device)dev);

后来我做
Device dev = (Device)devices.get(0);
boolean deviceExists = devicesScannerList.contains(dev);
if (deviceExists){....}

问题是 deviceExists 始终为 false,但我可以在 Debug模式下看到 devicesScannerList 已经包含给定的设备,我不想再次添加它。

我是否误解了 contains 功能?
帮助会很棒

谢谢
英戈

最佳答案

确保您的 Device类实现 equalshashCode方法正确。

例如如果您创建 2 Device具有完全相同数据的对象它们不会被 ObservableArrayList 视为相同(或任何列表)除非设备具有 equals/hashCode实现。

看下一个例子:

public class ObsListTest {

static class Device {
int value;

public Device(int value) {
this.value = value;
}
}

public static void main(String[] args) {
ObservableList<Device> list = FXCollections.<Device>observableArrayList();
Device data1 = new Device(1);
Device anotherData1 = new Device(1);
list.add(data1);
System.out.println(list.contains(data1)); // true
System.out.println(list.contains(anotherData1)); // false
}
}

但是,如果您在设备旁边添加,则此代码将起作用(两次都打印为真):
        @Override
public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass()) {
return false;
}
return this.value == ((Device) obj).value;
}

@Override
public int hashCode() {
return 7 + 5*value; // 5 and 7 are random prime numbers
}

在此处查看更多详细信息: What issues should be considered when overriding equals and hashCode in Java?

关于javafx-2 - ObservableList#contains() 为现有项目返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17677916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com