Вы можете поместить заказ в карту:
Map<String, Integer> columnOrder = new HashMap<>();
String[] order = new String[] {"gain", "rain", "sprain", "lame", "pain"};
for (int i = 0 ; i < order.length ; i++) {
columnOrder.put(order[i], i);
}
А затем просто используйте API Comparator
, чтобы предоставить компаратор для заказа.Мне кажется, это действительно не имеет значения, каков порядок невидимых столбцов, так как вы не можете их видеть, но вы можете сделать что-то вроде
Comparator<TableColumn<?, ?>> columnComparator =
Comparator.comparing(TableColumn<?,?>::isVisible).
.thenComparing(col -> columnOrder.getOrDefault(col.getText().toLowerCase(), Integer.MAX_VALUE));
Значение по умолчанию MAX_VALUE
просто гарантирует, чтолюбой столбец с текстом, которого нет на карте, идет в конце.