如何在 Java 7 中使用一个键和多个值构建地图

How do I build up in a map with one Key with many Values in Java 7

我想建立一个基于 2 个数组的映射,其中 1 个键里面有很多对象。

键:“字母 A”值:“信天翁” 值:“鳄鱼皮”

键:“字母 B”值:“Badger” 值:“Bandicoot”

该结构必须显示密钥 1 次,不得重复

您可以使用 Guava 的 Mutlimap 实现,但这可能与 Java 7 不兼容。 https://guava.dev/releases/23.0/api/docs/com/google/common/collect/Multimap.html

您可以通过对地图中的值使用列表来获得相同的效果,如下所示:

Map<String, List<String>> map = new HashMap<>();

然后,假设对于要添加到地图的每个条目,您在 key 中有键,在 val 中有值,像这样添加:

List<String> list = map.get(key);
if (list == null) {
  list = new ArrayList<>();
  map.put(key, list);
}
list.add(val);

希望代码是自解释的。

Java 7:

public Map<String, List<String>> group(String[] input) {
        Map<String, List<String>> result = new HashMap<>();

        for (String str : input) {
            String key = "Letter " + str.charAt(0);
            if (result.containsKey(key)) {
                result.get(key).add(str);//if Key already exists, just add this word to existing list.
            } else {
                List<String> list = new ArrayList<>();
                list.add(str);
                result.put(key, list); //Otherwise, create a new list and add the new word into the list
            }
        }
        return result;
    }

Java 8:

public static Map<String, List<String>> group(String[] input) {
    return Arrays.stream(input)
            .collect(Collectors.groupingBy(k -> "Letter " + k.charAt(0)));    
            //Provide the key for how you want to group. In your case it is first character of string.
}