首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java convert {String,String}[] to Map<String,String[]>

Java convert {String,String}[] to Map<String,String[]>
EN

Stack Overflow用户
提问于 2010-06-24 14:58:15
回答 4查看 1.9K关注 0票数 3

给定这个类:

代码语言:javascript
复制
 public class CategoryValuePair
 {
      String category;
      String value;
 }

以及一种方法:

代码语言:javascript
复制
public Map<String,List<String>> convert(CategoryValuePair[] values);

考虑到在values中我们可以收到许多具有相同类别的条目,我希望将这些条目转换为按类别分组的Map

有没有一种快速有效的方法来执行这种转换?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-24 15:26:10

要用更少的代码行实现它,可以使用Google Collections

代码语言:javascript
复制
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。

票数 1
EN

Stack Overflow用户

发布于 2010-06-24 15:08:10

据我所知,没有比对值进行迭代,然后将值放入map (就像一些预定义的方法)更简单的方法了。

代码语言:javascript
复制
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>,因为它对我来说更容易使用,这样您就不必为调整数组大小而烦恼了。

票数 2
EN

Stack Overflow用户

发布于 2010-06-25 04:26:20

使用lambdaj,您只需一行代码即可实现以下结果:

代码语言:javascript
复制
group(values, by(on(CategoryValuePair.class).getCategory()));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3107806

复制
相关文章

相似问题

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