首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java-8 -映射的排序键

Java-8 -映射的排序键
EN

Stack Overflow用户
提问于 2017-03-22 11:31:18
回答 2查看 56关注 0票数 1

我有一个Java地图:

代码语言:javascript
复制
 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"),
     ..

我会按字母顺序排列地图上的键。是否有可能以一种简单的方式做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-22 11:53:32

您可以创建一个按枚举名称排序的映射,如

代码语言:javascript
复制
Map<ScheduleAbsenceHeaderHistoryTypeEnum, ValueObject> map
    = new TreeMap<>(Comparator.comparing(Enum::name));

它使用枚举类中声明的常量名称,例如

代码语言:javascript
复制
enum ScheduleAbsenceHeaderHistoryTypeEnum {
    ADDITIONAL_HOURS, HOLIDAY, REMAINING_HOLIDAY_HOURS,
    REMAINING_HOLIDAY_DAYS, TRANSFER_HOLIDAY, INCREMENT_HOLIDAY,
}

不需要手动指定该名称。

但是,如果您的属性可能与名称不同,则可以使用

代码语言:javascript
复制
Map<ScheduleAbsenceHeaderHistoryTypeEnum, ValueObject> map
  =new TreeMap<>(Comparator.comparing(ScheduleAbsenceHeaderHistoryTypeEnum::getProperty));

根据特定的属性进行排序。

票数 2
EN

Stack Overflow用户

发布于 2017-03-22 11:42:32

给定Map<ScheduleAbsenceHeaderHistoryTypeEnum, ValueObject> map

代码语言:javascript
复制
    map.keySet().stream()
            .sorted(Comparator.comparing(ScheduleAbsenceHeaderHistoryTypeEnum::getName))
            .collect(Collectors.toList());

将产生一个排序的List<ScheduleAbsenceHeaderHistoryTypeEnum>

编辑:

如果您希望获得一个Map,在您将元素放入其中时对其键进行排序,请使用如下所示:

代码语言:javascript
复制
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);
    }};

声明:

代码语言:javascript
复制
map.keySet().forEach(System.out::println);

将产生以下产出:

代码语言:javascript
复制
ADDITIONAL_HOURS
HOLIDAY
INCREMENT_HOLIDAY
REMAINING_HOLIDAY_DAYS
TRANSFER_HOLIDAY
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42950414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档