如何在 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.
}
我想建立一个基于 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.
}