如何提高多列的 FilteredList 的性能 (9+)

我有一个大约有 5K 行和 9 列的 TableView。 TableView 由 SortedList 和 FilteredList 支持。每列都可用于通过 ContextMenu 和 CheckBoxes 过滤 TableView。

public class ColumnFilter {
    public ColumnFilter(TableFilter filter,TableColumn column) { // ... }

    // ...

    public boolean filter(item) {
           ObservableValue<T> value = this.column.getcellObservableValue(item);
           List<String> selectedValues = // ... get values from selected CheckBoxes in the ContextMenu
           if(Objects.isnull(value) || Objects.isnull(value.getvalue())) return true;

           for(String s : selectedValues) {
                if(s.equals(value.getvalue().toString())) return true;
           }
           return false;
    }
}

public class TableFilter {
   public class TableFilter(TableView view) {
     this.view = view;
     this.filterList = new FilteredList<>(view.getItems());
     this.sortedList = new SortedList<>(this.filterList);
     this.sortedList.comparatorProperty().bind(tableView.comparatorProperty());
     this.view.setItems(sortedList);
  }

  // Create a filter for every column
   public void initialize() {
        columnFilters.clear();
        this.view.getcolumns().forEach( column -> {
            columnFilters.add(new ColumnFilter(this,column));
        });
    }

   // ....

   // Set the predicate if a new filter item got added/removed
     public void filter() {
        this.filterList.setPredicate( p -> {
            for(ColumnFilter filter : this.columnFilters) {
                if(!filter.filter(p)) {
                    return false;
                }
            }

            return true;
        });
    }
}

问题是添加的列(=ColumnFilters)越多,性能就会变得非常糟糕。例如,如果我只需要过滤一列,则大约需要几毫秒。对于所有 9 列,最多需要 2 秒。

如何提高性能?还是我需要在没有 FilteredList 的情况下进行过滤?

wg85840223 回答:如何提高多列的 FilteredList 的性能 (9+)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1870.html

大家都在问