java - 如何在java中以多个日期作为值对 map 进行排序

标签 java collections

如何按多个日期值对 HashMap 条目进行排序

假设我有一个 map ,其键为字符串,值为具有 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")); 

** 注意:以上字符串使用 SimpleDateFormat 解析为日期

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

公共(public)类 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;
}

最佳答案

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

关于java - 如何在java中以多个日期作为值对 map 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53790837/

相关文章:

java - 如何检查两个二叉搜索树是否具有相同的精确键(忽略值)?

java - 使用 Selenium WebDriver 和 Java 机器人类上传文件

java - Arraylist<ABC> 中的索引与其他 Arraylist 进行比较

c# - 在按钮集合中创建、使用和比较元素

java - C++ 映射冲突解决作为 java HashMap

java - 为什么不推荐错误处理?

java - Java 集合中的原始数组

java - 嵌套枚举是否应该声明为静态?

java - 最佳 "free"JMS 实现(不会一直崩溃)

java - 如何使 JPanel 组件作为 JTree 中的节点可用?