Java-8 - Map的排序键

时间:2017-03-22 11:31:18

标签: java-8 hashmap

我有这张Java Map:

.show()

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

2 个答案:

答案 0 :(得分:1)

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

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

无需手动指定该名称。

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

{{1}}

按特定属性排序。

答案 1 :(得分:0)

鉴于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_HOLIDAY