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