按键(日期,字符串)对地图排序

san*_*aur 4 java sorting maven

Map<XMLGregorianCalendar, String> SortedByTimeForJourney = new HashMap<XMLGregorianCalendar, String>();
Run Code Online (Sandbox Code Playgroud)

我必须按键(XMLGregorianCalendar)对其进行排序。我试过了

 SortedByTimeForJourney.entrySet().stream().sorted(Map.Entry.<XMLGregorianCalendar, String>comparingByKey()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));
Run Code Online (Sandbox Code Playgroud)

但它显示类型参数'javax.xml.datatype.XMLGregorianCalendar'的边界不完整;应该实现'java.lang.Comparable'

我也尝试通过将其保存在LinkedHashMap中并使用Collections.util方法来执行此操作,但是无法执行。

有人请帮助我。

And*_*eas 6

Map按键排序,请使用TreeMap

正如javadoc所说:

映射是根据其键的自然顺序排序的,或者是Comparator根据映射创建时提供的排序的,具体取决于所使用的构造函数。

由于XMLGregorianCalendar没有实现Comparable,即没有自然顺序,因此必须Comparator构造函数中指定a 。

在Java 8+中,使用:

new TreeMap<>(XMLGregorianCalendar::compare)
Run Code Online (Sandbox Code Playgroud)

在旧版Java中,请使用:

new TreeMap<>(new Comparator<XMLGregorianCalendar>() {
    @Override
    public int compare(XMLGregorianCalendar cal1, XMLGregorianCalendar cal2) {
        return cal1.compare(cal2);
    }
})
Run Code Online (Sandbox Code Playgroud)