如何根据该列中数据的子字符串对TableView进行排序

时间:2017-05-23 19:28:01

标签: javafx javafx-8

我的表格列(" ID"),其中celldata有一些字符串和整数表示如下。

ID
ABC1
fgd5
hgt9
ftg7

我应该在排序后得到以下结果:

ID
ABC1
fgd5
ftg7
hgt9

那么如何才能根据列数据中的整数值对此列进行排序。

1 个答案:

答案 0 :(得分:2)

假设

TableColumn<SomeEntity, String> idColumn ;

你可以做到

// any number of non-digits (consumed greedily), 
// followed by any number of digits (consumed greedily, as a group named "value"),
// followed by anything
Pattern pattern = Pattern.compile("\\D*(?<value>\\d*).*");

idColumn.setComparator(Comparator.comparingInt(id -> {
    Matcher matcher = pattern.matcher(id);

    // value to return if no match:
    int defaultValue = 0 ;

   if (matcher.matches()) {
        // get the portion of the match that matched the group named "value":
        String value = matcher.group("value");
        if (value.isEmpty()) {
            return defaultValue ;
        } else {
            // convert to an int:
            return Integer.parseInt(value);
        }
    } else {
        return defaultValue ;
    }
}));