【问题标题】:Java-8 - sort keys of MapJava-8 - Map 的排序键
【发布时间】:2017-03-22 11:31:18
【问题描述】:

我有这个 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"),
     ..

我将按字母顺序对地图的键进行排序。 有没有可能以简单的方式做到这一点?

【问题讨论】:

  • 为什么要把多余的名字字符串传递给enum的构造函数?没有那个名称可以通过name() 检索。

标签: java-8 hashmap


【解决方案1】:

您可以创建一个按枚举名称排序的地图,例如

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));

按该特定属性排序。

【讨论】:

    【解决方案2】:

    给定Map&lt;ScheduleAbsenceHeaderHistoryTypeEnum, ValueObject&gt; map

        map.keySet().stream()
                .sorted(Comparator.comparing(ScheduleAbsenceHeaderHistoryTypeEnum::getName))
                .collect(Collectors.toList());
    

    将产生一个已排序的List&lt;ScheduleAbsenceHeaderHistoryTypeEnum&gt;

    编辑:

    如果你想获得一个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
    

    【讨论】:

    • 还有可能保留地图吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2021-10-11
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    相关资源
    最近更新 更多