Хэш-карта Flutter<Строка, список> перезаписывает тип списка в хэш-карте при каждом добавлении

#flutter #dart #amplify

#flutter #dart #усилить

Вопрос:

Хэш-карта Flutter<String, 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;

      }
    }
 

Итак, если есть два разных строковых ключа, и каждый ключ имеет уникальный список, заполненный несколькими значениями в каждом. Если я записываю в список, каждый экземпляр обновляется, и поэтому это все те же данные. Следует отметить, что в этом коде могут быть бессмысленные вещи, но я просто некоторое время плевался.

Комментарии:

1. кажется, вам нужны groupListsBy

2. Это кажется многообещающим наверняка. Спасибо за быстрый ответ. @pskink

3. или groupBy функция верхнего уровня, в документах говорится: «Группирует элементы в значениях по значению, возвращаемому ключом. Возвращает сопоставление из ключей, вычисленных по ключу, со списком всех значений, для которых ключ возвращает этот ключ. Значения отображаются в списке в том же относительном порядке, что и в значениях. »

4. groupListsBy решил этот вопрос. По правде говоря, я закончил тем, что использовал stream, чтобы заставить все это работать, хотя, поскольку это нужно было соблюдать.

Ответ №1:

ElementJobMap[Key] = tmpList;

Похоже, вы добавляете один и тот же экземпляр списка в качестве основы для каждой записи. Затем вы добавляете к этому единственному экземпляру. Если вы хотите, чтобы ваша хэш-карта содержала разные экземпляры списка для каждого ключа, вам нужно его создать.

Тем не менее, вам, вероятно, следует изучить методы группировки, предоставляемые через пакеты, нет смысла пытаться сделать это вручную.