【问题标题】:The Flutter Hashmap<String, List<CustomObject>> is overwriting the List type in the Hashmap on every addFlutter Hashmap<String, List<CustomObject>> 在每次添加时都会覆盖 Hashmap 中的 List 类型
【发布时间】:2022-01-12 07:21:49
【问题描述】:

Flutter Hashmap 在每个唯一键上覆盖 Hashmap 中的 List 类型。所以基本上代码看起来像:

    HashMap<String, List<Jobs> > ElementJobMap = new HashMap<String, List<Jobs> >();

    for (int i = 0; i < _JobsList.length; i++) {
      String Key = _JobsList[i].elementID.toString();
      if (ElementJobMap.containsKey(Key)) {
        if (Key == _JobsList[i].elementID.toString()) {
          
            ElementJobMap.update(Key, (value) {
            value.add(_JobsList[i]);
            return value;
          });

        }
      } else {

        ElementJobMap[Key] = tmpList;

      }
    }

因此,如果有两个不同的 String 键,并且每个键都有一个唯一的列表,每个列表中都填充了多个值。如果我写入列表,每个实例都会更新,所以它都是相同的数据。应该注意的是,这段代码中可能有一些毫无意义的东西,但我现在已经吐了一段时间了。

【问题讨论】:

  • 看来你需要groupListsBy
  • 看起来很有希望。谢谢你的快速反应。 @pskink
  • groupBy 顶级函数,文档说:“按键返回的值对值中的元素进行分组。从键计算的键返回一个映射到所有值的列表对于哪个键返回该键。值以与值中相同的相对顺序出现在列表中。"
  • groupListsBy 解决了这个问题。事实上,我最终还是使用了一个流来让这一切正常工作,因为它需要被观察到。

标签: flutter dart amplify


【解决方案1】:

ElementJobMap[Key] = tmpList;

您似乎正在添加完全相同的列表实例作为每个条目的基础。然后你添加到这个单一的实例。如果您希望您的 hashmap 为每个键保存不同的列表实例,您需要实际创建一个。

也就是说,您可能应该研究通过包提供的分组方法,尝试手动进行是没有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2010-10-09
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 2011-12-11
    • 2019-09-30
    相关资源
    最近更新 更多