gpt4 book ai didi

java - 编写一个在 Map 中添加 String 集合的方法

转载 作者:行者123 更新时间:2023-12-02 13:22:53 26 4
gpt4 key购买 nike

所以我有这些数据

Key      Value
--- -----
fruit apple
fruit banana
fruit grapes

cars honda
cars lexus
cars bmw

schools harvard
schools yale
...

我想将数据构造为 Map<String, Collections<String>>并创建一个添加所有数据的方法。到目前为止,我有一个构造函数来实例化我的 Map 变量

public Map<String, Collection<String>> keys;

public newMap() {
keys = new HashMap<>();
}

public void addkeys(String K, String V) {
Collection<String> names = new HashSet<String>();

if (keys.containsKey(K) && !keys.values().contains(V)) {
names.add(V);
courses.put(K, names);

} else if (!keys.containsKey(K) && !keys.values().contains(V)) {
names.add(V);
courses.put(student, classes);
}
}

所以当我运行测试时

newMap.addkeys("fruit", "apple");
newMap.addkeys("fruit, "banana");
newMap.addkeys("fruit", "grapes");
newMap.addkeys("cars, "honda");
newMap.addkeys("cars", "lexus");
newMap.addkeys("cars, "bmw");
newMap.addkeys("schools", "harvard");
newMap.addkeys("schools, "yale");

它应该返回

fruit = [apple, banana, grapes] 
cars = [honda, lexus, bmw]
schools = [hardvard, yale]

但我得到的是

fruit = [grapes]
cars = [bmw]
schools = [yale]

看起来它只添加了最后一个实例,因为每当我调用Collection<String> names = new HashSet<String>()时,我正在重新实例化 names但是当我在类(class)开始时实例化时,它只是添加了所有内容。所以它返回fruit = [apple, banana, grapes, honda, lexus, bmw, hardvard, yale]

最佳答案

Java 8 之前的版本:

使用 Map#get 的事实当没有映射时返回null,以确定是否需要在映射中放入一个新集合,然后将值添加到集合中。

public void addkeys(String K, String V) {
Collection<String> values = keys.get(K);
if (values == null) {
values = new HashSet<>();
keys.put(K, values);
}
values.add(V);
}

Java 8+:

使用Map#computeIfAbsent如果没有映射,则将新集合添加到映射,然后将值添加到返回的集合中。

public void addkeys(String K, String V) {
keys.computeIfAbsent(K, k -> new HashSet<>()).add(V);
}

关于java - 编写一个在 Map 中添加 String 集合的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43507312/

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