1
我正在用JavaFX做一个办公应用程序,我已经建立了某种过滤系统,只显示满足特定要求的人。现在,它使用了一些TextField和一些CheckBox,但我正在寻找一种更简洁的方式来过滤数据。我现在已经拥有了这个功能(并且工作正常),但我正在寻找更好的东西(我认为这应该是可能的)。干净的方式来筛选列表
public ObservableList<Person> filter(ObservableList<Person> original){
ObservableList<Person> filtered = FXCollections.observableArrayList();
if (filtersEmpty()) {
return original;
} else {
for (Person person : original) {
boolean hold = true;
if (!firstNameFilter.getText().equals("") &&
!person.getFirstName().toLowerCase().startsWith(firstNameFilter.getText().toLowerCase())) {
hold = false;
}
if (!lastNameFilter.getText().equals("") &&
!person.getLastName().toLowerCase().startsWith(lastNameFilter.getText().toLowerCase())) {
hold = false;
}
if (!vibNumberFilter.getText().equals("") &&
!person.getVibIdentifier().toLowerCase().contains(vibNumberFilter.getText().toLowerCase())) {
hold = false;
}
if (inGroupCheckBox.isSelected() && !person.getStatus().contains(DataManager.IN_GROUP_STATUS)){
hold = false;
}
if (notOnLinkedInCheckBox.isSelected() && !person.getStatus().contains(DataManager.NO_LINKEDIN_STATUS)){
hold = false;
}
if (workedForVIBCheckBox.isSelected() && !person.getStatus().contains(DataManager.ASKED_WORK_FOR_VIB_STATUS)){
hold = false;
}
if (invitedCheckBox.isSelected() && !person.getStatus().contains(DataManager.INVITED_TO_GROUP_STATUS)){
hold = false;
}
if (placeVIBCheckBox.isSelected() && !person.getStatus().contains(DataManager.ASKED_VIB_ON_CV)){
hold = false;
}
if (placeLogoCheckBox.isSelected() && !person.getStatus().contains(DataManager.ASKED_VIB_LOGO_ON_CV)){
hold = false;
}
if (didWorkForVIBCheckBox.isSelected() && !person.getStatus().contains(DataManager.DID_WORK_FOR_VIB_STATUS)){
hold = false;
}
if (didNotWorkForVIBCheckBox.isSelected() && !person.getStatus().contains(DataManager.DID_NOT_WORK_FOR_VIB_STATUS)){
hold = false;
}
if (hold) {
filtered.add(person);
}
}
}
return filtered;
}
这些UI元素总是会引入某种代码重复和错误的代码。
谢谢!这看起来非常promissing :)我会去给它去;) –
我试过了,它是宏伟的:)非常感谢你:) –