Java-8-映射的排序键
我有一张Java地图:Java-8-映射的排序键,java-8,hashmap,Java 8,Hashmap,我有一张Java地图: Map<ScheduleAbsenceHeaderHistoryTypeEnum, ValueObject> .... public enum ScheduleAbsenceHeaderHistoryTypeEnum { ADDITIONAL_HOURS("ADDITIONAL_HOURS"), HOLIDAY("HOLIDAY"), REMAINING_HOLIDAY_HOURS("REMAINING_HOLIDAY_H
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"),
..
Map
....
公共枚举计划缺席标头历史类型枚举{
额外工作时间(“额外工作时间”),
假日(“假日”),
剩余假日小时(“剩余假日小时”),
剩余假日(“剩余假日”),
调动假日(“调动假日”),
增量假日(“增量假日”),
..
我会按字母顺序排列地图上的键。
是否有可能以简单的方式执行此操作?给定地图地图
:
map.keySet().stream()
.sorted(Comparator.comparing(ScheduleAbsenceHeaderHistoryTypeEnum::getName))
.collect(Collectors.toList());
将生成已排序的列表
编辑:
如果您想获得一个映射
,当您将元素放入其中时,该映射的键已排序,请使用以下内容:
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);
}};
将产生以下输出:
ADDITIONAL_HOURS
HOLIDAY
INCREMENT_HOLIDAY
REMAINING_HOLIDAY_DAYS
TRANSFER_HOLIDAY
可以创建按枚举名称排序的映射,如
Map<ScheduleAbsenceHeaderHistoryTypeEnum, ValueObject> map
= new TreeMap<>(Comparator.comparing(Enum::name));
不需要手动指定该名称
但是,如果您的属性可能与名称不同,则可以使用
Map<ScheduleAbsenceHeaderHistoryTypeEnum, ValueObject> map
=new TreeMap<>(Comparator.comparing(ScheduleAbsenceHeaderHistoryTypeEnum::getProperty));
地图
=新树映射(Comparator.comparing(ScheduleAbscenceHeaderHistoryTypeEnum::getProperty));
按该特定属性排序。为什么要将多余的名称字符串传递给
枚举的构造函数呢?可以通过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));