gpt4 book ai didi

java - 检查不可变 map 构建器中是否存在值(列表)

转载 作者:搜寻专家 更新时间:2023-11-01 01:50:07 25 4
gpt4 key购买 nike

我有一个这样定义的 map :

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

我认为通过使用 ImmutableMap.Builder 构造使其不可变会很好。但就我而言,在将新元素放入 map 时,我需要首先检查它们是否存在,如果给定键的列表不存在,则创建它并向其添加元素:

for(final SomeClass elem : elements){
final String key = elem.getKey();
if(!map.containsKey(target)){
map.put(key, new LinkedList<SomeClass>());
}
map.get(key).add(elem);
}

如果 map 中有目标键,我需要创建分配给它的新列表,然后将元素添加到该列表中。

有什么方法可以使该映射不可变,而无需使用不必要的代码(例如更多循环)来首先初始化目标键列表?

顺便说一句。我正在使用 Java 7

最佳答案

你应该使用 ListMultimap这里。使用ImmutableListMultimap.builder() :

ImmutableListMultimap.Builder<String, SomeClass> builder = ImmutableListMultimap.builder();
for (final SomeClass elem : elements) {
final String key = elem.getKey();
builder.put(key, elem);
}
ImmutableListMultimap<String, SomeClass> multimap = builder.build();

但是等等!您的用例有内置方法 - Multimaps#index(Iterable, Function) :

ImmutableListMultimap<String, SomeClass> multimap = Multimaps.index(
elements,
new Function<SomeClass, String>() {
@Override public String apply(final SomeClass element) {
return element.getKey();
}
});

(在 Java 8 中):

ImmutableListMultimap<String, SomeClass> multimap =
Multimaps.index(elements, SomeClass::getKey);

关于java - 检查不可变 map 构建器中是否存在值(列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38664656/

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