首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >构造具有特定值的HashMap

构造具有特定值的HashMap
EN

Stack Overflow用户
提问于 2015-04-05 07:38:26
回答 1查看 136关注 0票数 1

我有一个模块列表,如下所示,我试图构造一个没有重复键的HashMap,其值是最新的。

代码语言:javascript
运行
复制
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))
);

模块:

代码语言:javascript
运行
复制
public class Module {
   private String name;
   private DateTime date;

   public Module(String name, DateTime date) {
      this.name = name;
      this.date = date;
   }
   //getter methods;

我想要构造一个HashMap。它的键是模块的名称,它的值是模块的最新日期,所以输出应该是{l=2010-5-4,s=2010-5-10},那么有什么有效的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-05 07:41:54

最简单的方法就是按日期排序(例如,使用Comparator<Module>),然后迭代:

代码语言:javascript
运行
复制
Map<String, DateTime> map = new HashMap<>();
for (Module module : sortedList) {
    map.put(module.getName(), module.getDate());
}

这将覆盖较早的值和后面的值,因为它们将在列表中稍后出现。

也许有一些更有效的方法来做到这一点,但它们不太可能是那么简单--我会首先使用简单的方法,看看它是否足够有效。

您也可以使用Java8流来完成这个任务,但是如果遇到重复的键,Collectors.toMap会抛出一个异常,这使它变得更加棘手。您可以按名称进行分组,然后只使用每个元素的最新元素,但这可能会比上面的简单方法更复杂。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29455174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档