gpt4 book ai didi

java - 用于处理 Map> 的便捷类

转载 作者:行者123 更新时间:2023-12-01 18:03:17 24 4
gpt4 key购买 nike

在我从事的各种项目中,我发现了这样的模式

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

public void addValue(Integer key, String value) {
if (!listMap.containsKey(key)) {
listMap.put(key, new ArrayList<String>());
}
listMap.get(key).add(value);
}

填充具有 Lists 的 map 作为值。

由于这是一种常见的模式,我想知道标准库中是否没有一些方便的类或类似 guava 的东西来管理向该结构添加和删除值。

最佳答案

Guava 优惠Multimap ,这非常适合您的目的:

ListMultimap<Integer, String> listMap = ArrayListMultimap.create();

public void addValue(Integer key, String value) {
listMap.put(key, value);
}

public List<String> getValues(Integer key) {
return listMap.get(key);
}

public Map<Integer, List<String>> asMap() {
// See documentation for details
return Multimaps.asMap(listMap);
}

Java 8 还提供了一种在单个语句中获取和初始化值的更方便的方法:

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

public void addValue(Integer key, String value) {
listMap.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
}

附带说明,我会稍微修改您的原始示例,以避免在找到匹配键时进行额外的查找:

public void addValue(Integer key, String value) {
List<String> values = listMap.get(key);
if (values == null) {
listMap.put(key, values = new ArrayList<>());
}
values.add(value);
}

关于java - 用于处理 Map<K, List<V>> 的便捷类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38990476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com