您可以通过比较它们的double值来概括比较数字,因为这是最大的。如果两个对象不能被转换为数字,并且无法从这些对象解析出double值,那么请比较它们的字符串值:
List<Map<String, Object>> data = Arrays.asList(
Map.of("Field1", 21.2d),
Map.of("Field1", "qqq"),
Map.of("Field1", "22.5"),
Map.of("Field1", 2),
Map.of("Field1", 3L),
Map.of("Field1", 23.1f));
data.sort(Comparator.comparingDouble((Map<String, Object> map) -> {
Object object = map.get("Field1");
if (object instanceof Number) {
return ((Number) object).doubleValue();
} else {
try {
return Double.parseDouble(String.valueOf(object));
} catch (NumberFormatException e) {
return Double.NaN;
}
}
}).thenComparing(map -> String.valueOf(map.get("Field1"))));
data.forEach(System.out::println);
另请参阅:按列标题将二维列表排序