Javafx 2 ObservableList#contains()为现有项返回false
我尝试使用OberservableLists contains函数检查给定元素是否已经在列表中,如果没有,则添加它。 我的代码如下所示:Javafx 2 ObservableList#contains()为现有项返回false,javafx-2,Javafx 2,我尝试使用OberservableLists contains函数检查给定元素是否已经在列表中,如果没有,则添加它。 我的代码如下所示: ObservableList<Device> devicesScannerList = FXCollections.observableArrayList() deviceScannerList.add((Device)dev); 问题是deviceExists总是false,但我可以在调试模式下看到DeviceScannerList已经包含给定
ObservableList<Device> devicesScannerList = FXCollections.observableArrayList()
deviceScannerList.add((Device)dev);
问题是deviceExists总是false,但我可以在调试模式下看到DeviceScannerList已经包含给定的设备,我不想再添加它
我是否理解contains函数?
帮助会很好
Thx
Ingo确保您的
设备
类正确实现了equals
和hashCode
方法
例如,如果使用完全相同的数据创建2个设备
对象,则除非设备已实现equals/hashCode
,否则它们不会被ObservableArrayList
(或任何列表)视为相同
请参见下一个示例:
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
}
}
请参阅此处的更多详细信息:
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
}