gpt4 book ai didi

java - 将字符串添加到 StringList,同时它是 HashMap 值的一部分

转载 作者:行者123 更新时间:2023-12-01 20:08:29 25 4
gpt4 key购买 nike

假设我有Map<List<String>, List<String>> whatComesNext ,

在 for 循环中,对于每次迭代,我想添加 List<String> text 的第 n 个元素值为 whatComesNext 。为什么我无法执行whatComesNext.put(key, whatComesNext.get(key).add(text.get(n))) ?这个想法是从 HashMap 中各自的键检索值并将我想要的字符串添加到其中。这是假设 HashMap 中的每个键都有一个值。

下面是我的完整代码:

static void learnFromText(Map<List<String>, List<String>> whatComesNext, List<String> text) {
for (int i=0; i<=text.size()-3; i++) {
if (whatComesNext.containsKey(Arrays.asList(text.get(i),text.get(i+1)))==false) {
whatComesNext.put(Arrays.asList(text.get(i),text.get(i+1)), Arrays.asList(""));
}

whatComesNext.put(Arrays.asList(text.get(i),text.get(i+1)), whatComesNext.get(Arrays.asList(text.get(i),text.get(i+1))).add(text.get(i+2)));
}
}

Arrays.asList()看起来很复杂,但这是因为当我尝试初始化自己的字符串列表以尝试保存我的键和值时,我得到了空映射,有人告诉我这是因为我反复清除分配给键和值的列表,留下他们无效。我想我可以通过直接引用原文List<String> text来解决这个问题。 ,因为它保持不变。这个想法是首先检查映射中是否不存在某个键,如果是,则为其分配一个空列表作为值,然后从text添加一个字符串。到 map 的值。

运行代码时出现的错误是Error: incompatible types: boolean cannot be converted to java.util.List<java.lang.String>在线whatComesNext.get(Arrays.asList(text.get(i),text.get(i+1))).add(text.get(i+2))); 。我不明白哪里会出错,因为我看不到哪个方法返回 boolean 值。

最佳答案

该错误来自 List.add(Object o)返回 boolean而不是列表本身。 Map被声明为包含 List<String> 的实例作为值(value)。如果您只想向列表添加一个值,只需从 map 中检索它并调用 add在上面。检查 null 的 get-process 结果并创建一个新列表并将其放入 Map(如果是这种情况)

我还发现了一些其他问题:

  • 您调用Arrays.asList(...)多次创建具有相同元素的多个列表。这是一个主要的性能问题,您很幸运,返回的列表实际上正在实现 equals ,这样你的逻辑实际上是有效的(在你更新它之前,我预计这是你的“不起作用”描述的问题。
  • 如果该键不存在,则您将创建一个包含空文本的列表。如果这应该是一个空列表,那么这不是您正在做的事情,当您使用不属于原始输入的文本值(即作为第一个元素的空文本)时,您可能会遇到问题值(value)观。

在我看来,在不更改 Map a 键的类型的情况下,更好的实现将如下所示:

static void learnFromText(Map<List<String> whatComesNext, List<String>, List<String> text) {
for (int i=0; i<= text.size() - 3; i++) {
List<String> listKey = text.subList(i, i+2);
List<String> value = whatComesNext.get(listKey);
if (value == null) {
value = new ArrayList<>();
whatComesNext.put(listKey, value);
}

value.add(text.get(i+2)));
}
}

键列表的计算仅发生一次,从而提高了性能并减少了资源需求。我认为这样也更具可读性。

关于java - 将字符串添加到 StringList,同时它是 HashMap 值的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47045196/

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