给定这个类:
public class CategoryValuePair
{
String category;
String value;
}以及一种方法:
public Map<String,List<String>> convert(CategoryValuePair[] values);考虑到在values中我们可以收到许多具有相同类别的条目,我希望将这些条目转换为按类别分组的Map。
有没有一种快速有效的方法来执行这种转换?
发布于 2010-06-24 15:26:10
要用更少的代码行实现它,可以使用Google Collections
public Map<String, Collection<String>> convert(CategoryValuePair[] values) {
Multimap<String, String> mmap = ArrayListMultimap.create();
for (CategoryValuePair value : values) {
mmap.put(value.category, value.value);
}
return mmap.asMap();
}如果您不想允许重复的值,请用HashMultimap替换ArrayListMultimap。
发布于 2010-06-24 15:08:10
据我所知,没有比对值进行迭代,然后将值放入map (就像一些预定义的方法)更简单的方法了。
Map<String, List<String>> map = new HashMap<String, List<String>>();
if (values != null) {
for (CategoryValuePair cvp : values) {
List<String> vals = map.get(cvp.category);
if (vals == null) {
vals = new ArrayList<String>();
map.put(cvp.category, vals);
}
vals.add(cvp.value);
}
}我将映射值从String[]改为List<String>,因为它对我来说更容易使用,这样您就不必为调整数组大小而烦恼了。
发布于 2010-06-25 04:26:20
使用lambdaj,您只需一行代码即可实现以下结果:
group(values, by(on(CategoryValuePair.class).getCategory()));https://stackoverflow.com/questions/3107806
复制相似问题