Map<XMLGregorianCalendar, String> SortedByTimeForJourney = new HashMap<XMLGregorianCalendar, String>();
我必须按键排序(XMLGregorianCalendar)。
SortedByTimeForJourney.entrySet().stream().sorted(Map.Entry.<XMLGregorianCalendar, String>comparingByKey()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));
但它显示类型参数“javax.xml.datatype.XMLGregorianCalendar”不在其范围内;应该实现“java.lang.可比较的〈?超级java.xml.数据类型.XMLGregoringCalendar〉”
我也尝试过将其保存在LinkedHashMap中,并使用Collections.util方法,但无法做到。
4条答案
按热度按时间wljmcqd81#
要按键对
Map
进行排序,请使用TreeMap
。正如javadoc所说:
Map根据其键的自然顺序排序,或者根据创建Map时提供的
Comparator
排序,具体取决于使用的构造函数。因为
XMLGregorianCalendar
没有实现Comparable
,也就是说没有一个 * 自然排序 *,所以你必须在构造函数中指定一个Comparator
。在Java 8+中,请用途:
在旧版本的Java中,请用途:
vsnjm48y2#
错误信息明确指出-
XMLGregorianCalendar
没有实现Comparable
,因此您将无法执行排序操作。因此,为了快速帮助您解决问题,请参阅this post。此外,使用
TreeMap
比使用Reinventing the wheel
更好。o8x7eapl3#
您的问题在于密钥对象XMLGregorianCalendar不是Comparable。
类型参数“javax.xml.datatype.XMLGregorianCalendar”不在其界限内;应实现“java.lang.Comparable”
您可以使用Date,这是一个可比。
使用如下:
从XMLGregorianCalendar获取时间:
示例:sortedByTimeForJourney默认为基于日期排序。
x4shl7ld4#
基于Andreas answer,您可以使用以下命令: