我们使用以下简化的代码进行排序。
Collator collator = Collator.getInstance(Locale.GERMAN);
collator.setStrength(Collator.SECONDARY);
return Comparator.comparing(entity -> {
try {
// Custom stuff here...
// Values processed here cn be either String, Integer, Boolean or Date
return (Comparable)sortFieldValue;
} catch (Exception e) {
throw new RuntimeException();
}
}, collator);
这对于
String
值来说效果很好。然而,我们想重用它来比较 Boolean
、Integer
等。使用给定的整理器,结果是:
java.lang.Integer cannot be cast to java.lang.String
删除排序器时,排序也适用于除
String
以外的数据类型,但例如德语元音变音未按预期排序。
对于基于字符串的值使用整理器“组合”并忽略其他数据类型的适当方法是什么?
我们所做的是检查正在比较的实体的类型,并且仅在两个值实际上都是字符串时才使用排序器(通过 collator.compare(..))。