Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-8-映射的排序键_Java 8_Hashmap - Fatal编程技术网

Java-8-映射的排序键

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

我有一张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"),
     ..
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));