如何使用ICU归类规则对JavaFX TableView中的数据进行排序?

问题描述

我想使用ICU归类规则,使用JavaFX在TableColumn中的TableView中对TableView中的(String)数据进行排序,因此无法在线找到示例。这对我有用。 (我假设读者已经知道如何将数据获取import com.ibm.icu.text.RuleBasedCollator; 中,因为这不是重点。)

解决方法

首先,我们导入ICU RuleBasedCollat​​or:

TableView<Person> personTable;
TableColumn<Person,String> firstNameColumn;
TableColumn<Person,String> lastNameColumn;

第二,假设我们有一个Person类,其中有名字和姓氏String字段。 TableView有两个TableColumns,一个用于名字,另一个用于名字:

String newRules = "& S < C & Mu < Mue";
RuleBasedCollator collatorViaRules = new RuleBasedCollator(newRules);
Comparator<String> comparatorViaRules = Comparator.comparing(String::toString,collatorViaRules);
firstNameColumn.setComparator((String s1,String s2) -> {
            return comparatorViaRules.compare(s1,s2);
});
lastNameColumn.setComparator((String s1,s2);
});

第三,在视图控制器的initialize()方法中,添加如下内容:

newRules

RuleBasedCollator中的两个ICU规则会将任何C放在S后面,并将Mu ...放在Mue前面。 (这些在这里并不是很有意义;它们是要查看是否应用了ICU规则。实际情况可能会有更复杂的规则。) 我们使用ICU规则创建ICU Comparator,然后使用这些规则创建{{1}}。 最后,我们将列字段的比较器设置为使用该比较器。