如何在java中将多个日期作为值对地图进行排序

如何在java中将多个日期作为值对地图进行排序,java,collections,Java,Collections,如何将HashMap条目按多个值排序为日期 假设我有一个带有键字符串和值的映射,作为带有2个日期的对象 按对象中的两个日期进行排序 Map<String, dateWrapper> map = new HashMap<>(); map.put("user10",new dateWrapper("20180131","20181231")); map.put("user3",new dateWrapper("20170131","20171231")); map.

如何将HashMap条目按多个值排序为日期

假设我有一个带有键字符串和值的映射,作为带有2个日期的对象

按对象中的两个日期进行排序

Map<String, dateWrapper> map = new HashMap<>();
map.put("user10",new dateWrapper("20180131","20181231"));    
map.put("user3",new dateWrapper("20170131","20171231")); 
map.put("user5",new dateWrapper("20160131","20161231")); 
map.put("user1",new dateWrapper("20170131","20170131")); 
**注意:以上字符串使用SimpleDataFormat解析为日期

预期输出为user5、user1、user3、user10

公共类dateWrapper实现可序列化{

private Date date1;
private Date date2;

}
List<Map.Entry<String, dateWrapper>> dateWrapperEntries = new ArrayList<>(map.entrySet());
Trying below  this but its returning null 
Collections.sort(dateWrapperEntries, Map.Entry.comparingByValue(Comparator.comparing(dateWrapper::getDate1).thenComparing(dateWrapper::getDate2)));

private static Date convertStringToDate(String inputStr) {
    Date inputDate = null;
    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMdd");

    try {
        inputDate = sdf.parse(inputStr);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return inputDate;
}

它返回null集合的返回类型。sort为void。它不可能返回null。准确地告诉您问题是什么,即实际输出是什么。此代码段生成一个正确排序的列表。您能详细说明您面临的问题是什么吗?当我打印dateWrapperEntries时,仅打印为[]这意味着你的地图是空的。SimpleDateFormat是出了名的麻烦,它和Date都过时很久了。所以避免使用它们。使用LocalDate from和DateTimeFormatter.BASIC_ISO_Date进行解析。它不长,它的日期使用了Comparator.ComparingActual Date很长:-Date.getTime很长,@balajiThank你们知道它在工作吗map为null,如果我的错误赋值是错误的,我添加了可选选项,在map为null时不抛出NPE
public static List<String> sort(Map<String, dateWrapper> map) {
    // comparator to compare two dateWrapper from Map.Entry value
    final Comparator<Map.Entry<String, dateWrapper>> comparator =
            Comparator.comparing((Function<Map.Entry<String, dateWrapper>, Date>)e -> e.getValue().getDate1())
                      .thenComparing(e -> e.getValue().getDate2());

    // convert map to entry set and compare it
    return Optional.ofNullable(map).orElse(Collections.emptyMap()).entrySet().stream()
                   .sorted(comparator)
                   .map(Map.Entry::getKey)
                   .collect(Collectors.toList());
}