-1

sample list:

_events = [{ "name" : "A", "date" : "15 jun" },
{ "name" : "B", "date" : "15 jun" },
{ "name" : "C", "date" : "17 jun" },
{ "name" : "D", "date" : "17 jun" },]


kEvents = LinkedHashMap<DateTime, List<dynamic>>(equals: isSameDay, hashCode: getHashCode)
      ..addAll(_events);

int getHashCode(DateTime key) {
  return key.day * 1000000 + key.month * 10000 + key.year;
}

i am expecting the kEvents will be displaying all data for a particular day, for example if kEvents['27 jun'] it should become:

[{ "name" : "C", "date" : "17 jun" },
    { "name" : "D", "date" : "17 jun" },]

however my result was:

[{ "name" : "D", "date" : "17 jun" }]

the last item replaced previous item instead of append to the list.... why?

icantcode
  • 142
  • 1
  • 15

1 Answers1

0

kEvents is a LinkedHashMap. _events is a List of LinkedHashMaps. A single LinkedHashMap can store only one element for each key; hence there is only one value for 'name' and one value for 'key'.

If you want to reorganize _events by date, then you'd need to iterate over _events and generate a new Map with dates as the keys and Lists as the values. For example:

var _events = [
  {"name": "A", "date": "15 jun"},
  {"name": "B", "date": "15 jun"},
  {"name": "C", "date": "17 jun"},
  {"name": "D", "date": "17 jun"},
];

void main() {
  var byDate = <String, List<String>>{};
  for (var map in _events) {
    (byDate[map['date']!] ??= []).add(map['name']!);
  }

  print(byDate); // Prints: {15 jun: [A, B], 17 jun: [C, D]}
}
jamesdlin
  • 81,374
  • 13
  • 159
  • 204