问题描述
我想使用ICU归类规则,使用JavaFX在TableColumn
中的TableView
中对TableView
中的(String)数据进行排序,因此无法在线找到示例。这对我有用。 (我假设读者已经知道如何将数据获取到import com.ibm.icu.text.RuleBasedCollator;
中,因为这不是重点。)
解决方法
首先,我们导入ICU RuleBasedCollator:
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}}。
最后,我们将列字段的比较器设置为使用该比较器。