Java 构造具有特定值的HashMap
我有一个如下所示的模块列表,我尝试构建一个没有重复键的HashMap,并且该值是最新的Java 构造具有特定值的HashMap,java,jakarta-ee,Java,Jakarta Ee,我有一个如下所示的模块列表,我尝试构建一个没有重复键的HashMap,并且该值是最新的 DateTime start = new DateTime(2010, 5, 1, 12, 0, 0, 0); List<Module> modules = Arrays.asList( new Module("s", start.plusDays(4)), new Module("l", start.plusDays(3)), new Module("s", start.plu
DateTime start = new DateTime(2010, 5, 1, 12, 0, 0, 0);
List<Module> modules = Arrays.asList(
new Module("s", start.plusDays(4)),
new Module("l", start.plusDays(3)),
new Module("s", start.plusDays(2)),
new Module("s", start.plusDays(9)),
new Module("s", start.plusDays(1))
);
我想构造一个HashMap。它的键是模块的名称,它的值是模块的最新日期,因此输出应该是{l=2010-5-4,s=2010-5-10}
,那么有什么有效的方法可以做到这一点吗?最简单的方法就是按日期排序(例如,使用比较器),然后迭代:
Map<String, DateTime> map = new HashMap<>();
for (Module module : sortedList) {
map.put(module.getName(), module.getDate());
}
Map Map=newhashmap();
用于(模块:分类列表){
put(module.getName(),module.getDate());
}
这将用后面的值覆盖前面的值,因为它们将出现在列表的后面
也许有一些更有效的方法可以做到这一点,但它们不太可能那么简单-我会先使用简单的方法,看看它是否足够有效
您也可以使用Java8流来实现这一点,但是Collectors.toMap
会在遇到重复键时抛出异常,这使得它稍微复杂一些。您可以改为按名称分组,然后只取每个模块的最新元素,但这可能会比上面简单的方法更复杂。谢谢Jon,但我们不允许更改模块,那么还有其他的排序方法吗?@simon.Liu:我从来没有建议过更改模块-编写一个比较器
,按日期比较模块,并将其传递给排序方法。
Map<String, DateTime> map = new HashMap<>();
for (Module module : sortedList) {
map.put(module.getName(), module.getDate());
}