Отфильтрованный список Невозможно использовать .contains - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь превратить мой список в отфильтрованный список.Я нашел инструкции по переполнению стека, но поток заблокирован, поэтому я не могу комментировать его, чтобы задать этот вопрос.По какой-то причине, когда я набираю выражение:

filteredOblist.setPredicate(s -> s.contains(filterUID));

s.contains (FilterUID));не работает из-за ошибки

Ошибка: (65, 51) Java: не удается найти символ символа: метод содержит (java.lang.String) расположение: переменная s типа Controllers.ModelTable

полный код:

 public void initialize(URL location, ResourceBundle resources) {
        filter_uid.textProperty().addListener(obs ->{
            String filterUID = filter_uid.getText();
            if (filterUID == null || filterUID.length() == 0){
                filteredOblist.setPredicate(s -> true);
            }else {
                filteredOblist.setPredicate(s -> s.contains(filterUID));
            }
        });

Определения:

@FXML public TableView<ModelTable> taskManagerView;
    @FXML public TableColumn<ModelTable, String> col_UID;
    @FXML public TableColumn<ModelTable, String> col_Date;
    @FXML public TableColumn<ModelTable, String> col_CreatedBy;
    @FXML public TableColumn<ModelTable, String> col_Category;
    @FXML public TableColumn<ModelTable, String> col_Task;

        @FXML
        TextField filter_uid;
        @FXML
        TextField filter_created;
        @FXML
        ChoiceBox filtered_choice;
        @FXML
        DatePicker filter_date;



    ObservableList<ModelTable> oblist = FXCollections.observableArrayList();
    FilteredList<ModelTable> filteredOblist = new FilteredList<>(oblist, s -> true);

Спасибо

1 Ответ

0 голосов
/ 19 февраля 2019

Для того, чтобы это работало, ваш ModelTable класс должен иметь метод contains, например,

public boolean contains(String uuid) {
        return UID.equals(uuid);
}

И наоборот, если вам нужны разные стратегии фильтрации, как указано в вашем комментарии, я бы снял эту ответственностьклиенту, просто сняв его с класса ModelTable.Просто напишите предикат, получая доступ к различным полям из ModelTable по желанию.Вот как выглядят два предиката после удаления метода contains из класса ModelTable.

filteredOblist.setPredicate(s -> s.UID.equals(filterUID));

filteredOblist.setPredicate(s -> s.CreatedBy.startsWith(filterCreated));

Суть в том, что ваш клиент должен предоставить стратегию фильтрации, поскольку она варьируется в зависимости от контекста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...