Java 如何按键字符串对Hashmap排序?
我在HashMap中使用了一些假日日期Java 如何按键字符串对Hashmap排序?,java,string,sorting,date,hashmap,Java,String,Sorting,Date,Hashmap,我在HashMap中使用了一些假日日期 this.holidayMap.put("01.05", new Event("1. Mai")); this.holidayMap.put("14.02", new Event("Valentinseday")); 这是我的一些意见。我有一个单独的方法来添加它们。现在我想按字符串日期对它们进行排序,但我不知道如何进行排序。我看过很多简单字符串的帖子,但是由于日期格式的原因,我的帖子有点难 我只想调用一个方法,然后对HashMap进行排序
this.holidayMap.put("01.05", new Event("1. Mai"));
this.holidayMap.put("14.02", new Event("Valentinseday"));
这是我的一些意见。我有一个单独的方法来添加它们。现在我想按字符串日期对它们进行排序,但我不知道如何进行排序。我看过很多简单字符串的帖子,但是由于日期格式的原因,我的帖子有点难
我只想调用一个方法,然后对HashMap进行排序。
我不想在其他类型中更改HashMap。因为我必须使用HashMap
this.holidayMap.put("01.05", new Event("1. Mai"));
this.holidayMap.put("14.02", new Event("Valentinseday"));
很抱歉,我没有代码要显示
致意
迈克尔如果你必须使用HashMap,你可以把你的键放在一个浮动列表或向量中,对你的键进行排序并保留你的HashMap
java.util.HashMap holidayMap=new java.util.HashMap();
holidayMap.put(“01.05”,新事件(“1.Mai”);
holidayMap.put(“14.02”,新活动(“情人节”);
java.util.Vector v=new java.util.Vector();
//使用迭代器循环HashMap并将其添加到向量
迭代器it=holidayMap.entrySet().Iterator();
while(it.hasNext()){
Map.Entry对=(Map.Entry)it.next();
v、 add(Integer.valueOf((String)pair.getKey());
}
//现在你要做的就是把钥匙分类
BubbleSort s=新的BubbleSort(v);
使用列表中的已排序键或矢量按需获取已排序地图数据
但是我确实建议您使用LinkedList或二叉树。这有两个问题。我可以解决其中一个问题,但另一个问题不能完全满足您的要求 最简单的方法是如何将字符串作为日期值进行排序。解决方案是使用内置的
MonthDay
类。从1月1日到12月31日,该类具有自然顺序。将字符串解析为MonthDay
对象非常简单
我不能做的部分是对HashMap
进行排序。您无法控制HashMap
中条目的顺序。建议包括:
- 将
中的所有数据取出到一个列表(或数组)中,并对其进行排序HashMap
- 使用一个
,通常是托马斯·弗里奇在评论中建议的SortedMap
TreeMap
- 我能得到的最接近的方法是:使用
。您可以将顺序控制为插入顺序或访问顺序。要对映射进行排序,您需要对键进行排序,然后依次为每个键删除并重新插入,或者只查询其映射值。LinkedHashMap
是LinkedHashMap
的子类,因此它没有尽管这可能会满足你的要求,但在我耳中听起来有点荒谬HashMap
HashMap
转换为TreeMap
:
DateTimeFormatter parseFormatter = DateTimeFormatter.ofPattern("dd.MM");
SortedMap<MonthDay, Event> sortedHolidayMap = this.holidayMap
.entrySet()
.stream()
.collect(Collectors.toMap((Map.Entry<String, Event> e) -> MonthDay.parse(e.getKey(), parseFormatter),
(Map.Entry<String, Event> e) -> e.getValue(),
(u, v) -> { throw new IllegalArgumentException(); },
() -> new TreeMap<MonthDay, Event>()));
它们分类得很好:
01.01 New Year
14.02 Valentinesday
17.03 St. Patrick
01.05 1. Mai
17.05 Grunnlovsdag
03.10 Tag der deutschen Einheit
您没有对hashmap进行排序-它们是无序的(或者更确切地说,没有指定顺序,并且可以更改)。您是否在寻找一个方法的实现,该方法的行是
List getEventsOrderedByDate(Map events)
?你不能对HashMap
进行排序。你应该使用配备专门的比较器的。处理日期和排序映射在堆栈溢出时已被多次处理。在发布之前,请始终彻底搜索。我喜欢这个主意。不过,我不会使用float
s。我相信字符串是日期(没有年份,因为每年都有相同的假日),所以01.05
表示5月1日,14.02
表示2月14日。人们可能更喜欢ArrayList
和它自己的sort
方法(或Collections.sort()
)。我确实忽略了日期问题,你的解决方案比我的更有意义。
01.01 New Year
14.02 Valentinesday
17.03 St. Patrick
01.05 1. Mai
17.05 Grunnlovsdag
03.10 Tag der deutschen Einheit