对于列<v,t =“”>的JavaFX列排序,其中T扩展了ObservableList <u>

时间:2017-07-28 10:19:24

标签: java javafx javafx-8

我有一个表格,我在其中显示一组客户端的电子邮件地址,这样当它们显示一个电子邮件地址时,如果有一个列表,它会在表格单元格中指出它们的电子邮件地址数量有,如果没有,则显示“无”。这一切都很好,我只是设置表格单元来处理这个问题。但是,该列没有以合理的顺序排序,这是公平的,因为它正在尝试对列表进行排序,所以我想我会在列上设置自定义比较器:

@SuppressWarnings({ "rawtypes", "unchecked" })
public static <T extends ObservableList<U>, V extends Entity, U extends Entity> void initializeFilteredStringEntityListColumn(
        GridColumn<V, T> column,
        Function<V, T> propertyProvider,
        Function<U, String> stringProvider,
        String pluralName,
        ListFilterProperty<V> filters) {
    column.setCellFactory(col -> new StringListTableCell(stringProvider, pluralName));
    column.setComparator(new Comparator<T>() {

        @Override
        public int compare(T list1, T list2) {
            U firstItemList1 = list1.isEmpty() ? null : list1.get(0);
            U firstItemList2 = list2.isEmpty() ? null : list2.get(0);
            String listOneComparative = stringProvider.apply(firstItemList1);
            String listTwoComparative = stringProvider.apply(firstItemList2);
            int compareTo = listOneComparative.compareTo(listTwoComparative);                
            return compareTo;
        }
    });
    column.setCellValueFactory(cellData -> {
        V value = cellData.getValue();
        T t = propertyProvider.apply(value);
        return (ObservableValue<T>) t;
    });
    column.setFilterContextMenu(SearchFilterContextMenu.contains(filters));
}

调试时肯定会进入compare方法,但表似乎没有应用排序顺序。任何想法都会非常有用。

0 个答案:

没有答案