我有一个Java地图:
Map<ScheduleAbsenceHeaderHistoryTypeEnum, ValueObject>
....
public enum ScheduleAbsenceHeaderHistoryTypeEnum {
ADDITIONAL_HOURS("ADDITIONAL_HOURS"),
HOLIDAY("HOLIDAY"),
REMAINING_HOLIDAY_HOURS("REMAINING_HOLIDAY_HOURS"),
REMAINING_HOLIDAY_DAYS("REMAINING_HOLIDAY_DAYS"),
TRANSFER_HOLIDAY("TRANSFER_HOLIDAY"),
INCREMENT_HOLIDAY("INCREMENT_HOLIDAY"),
..我会按字母顺序排列地图上的键。是否有可能以一种简单的方式做到这一点?
发布于 2017-03-22 11:53:32
您可以创建一个按枚举名称排序的映射,如
Map<ScheduleAbsenceHeaderHistoryTypeEnum, ValueObject> map
= new TreeMap<>(Comparator.comparing(Enum::name));它使用枚举类中声明的常量名称,例如
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));根据特定的属性进行排序。
发布于 2017-03-22 11:42:32
给定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_HOLIDAYhttps://stackoverflow.com/questions/42950414
复制相似问题