【发布时间】:2011-03-02 10:53:45
【问题描述】:
我经常需要获取对象列表并根据对象中包含的值将它们分组到 Map 中。例如。按国家/地区列出用户和组。
我的代码通常如下所示:
Map<String, List<User>> usersByCountry = new HashMap<String, List<User>>();
for(User user : listOfUsers) {
if(usersByCountry.containsKey(user.getCountry())) {
//Add to existing list
usersByCountry.get(user.getCountry()).add(user);
} else {
//Create new list
List<User> users = new ArrayList<User>(1);
users.add(user);
usersByCountry.put(user.getCountry(), users);
}
}
但是我不禁认为这很尴尬,并且一些大师有更好的方法。到目前为止我能看到的最接近的是MultiMap from Google Collections。
有没有标准的方法?
谢谢!
【问题讨论】:
-
真的应该是
Map<String, Set<User>>吗?答案对您选择构建或使用的内容有所不同。请注意,Google 集合提供了对各种类型列表和集合的嵌套集合的改进。 -
为 .Net 和 Linq 删除 Java。
-
@Hamish:是的,因为我们对依赖关系的担忧完全无关紧要!
-
@Hamish:如果我这样做了,我再也无法面对我的 .Net 编码兄弟了。耻辱!
标签: java collections hashmap