我有这张Java Map:
.show()
我将按字母顺序对地图的键进行排序。 是否有可能以一种简单的方式做到这一点?
答案 0 :(得分:1)
您可以创建按枚举名称排序的地图,例如
enum ScheduleAbsenceHeaderHistoryTypeEnum {
ADDITIONAL_HOURS, HOLIDAY, REMAINING_HOLIDAY_HOURS,
REMAINING_HOLIDAY_DAYS, TRANSFER_HOLIDAY, INCREMENT_HOLIDAY,
}
这使用枚举类中声明的常量名称,例如
Map<ScheduleAbsenceHeaderHistoryTypeEnum, ValueObject> map
=new TreeMap<>(Comparator.comparing(ScheduleAbsenceHeaderHistoryTypeEnum::getProperty));
无需手动指定该名称。
但是如果您的某个属性可能与该名称不同,则可以使用
{{1}}
按特定属性排序。
答案 1 :(得分:0)
鉴于Map<ScheduleAbsenceHeaderHistoryTypeEnum, ValueObject> map
:
map.keySet().stream()
.sorted(Comparator.comparing(ScheduleAbsenceHeaderHistoryTypeEnum::getName))
.collect(Collectors.toList());
将生成已排序的List<ScheduleAbsenceHeaderHistoryTypeEnum>
。
修改强>
如果你希望得到一个Map
,当你将元素放入其中时,它的键被排序,请使用以下内容:
SortedMap<ScheduleAbsenceHeaderHistoryTypeEnum, ValueObject> map =
new TreeMap<ScheduleAbsenceHeaderHistoryTypeEnum, ValueObject>(comparing(ScheduleAbsenceHeaderHistoryTypeEnum::getName)) {{
put(HOLIDAY, null);
put(REMAINING_HOLIDAY_DAYS, null);
put(TRANSFER_HOLIDAY, null);
put(INCREMENT_HOLIDAY, null);
put(ADDITIONAL_HOURS, null);
}};
声明:
map.keySet().forEach(System.out::println);
将产生以下输出:
ADDITIONAL_HOURS
HOLIDAY
INCREMENT_HOLIDAY
REMAINING_HOLIDAY_DAYS
TRANSFER_HOLIDAY