Home > Software engineering >  How to Delete duplicate items from a List Dart | Flutter
How to Delete duplicate items from a List Dart | Flutter

Time:10-25

I have a set of items. From this i want to delete all duplicate values. i tried this finalList = [...{...users!}]; and this print(users.toSet().toList());. But both are printing all the data in the list. It didn't removing duplicate values. Below is my list

List users = [
    {
      "userEmail":"[email protected]"
    },
    {
      "userEmail":"[email protected]"
    },
    {
      "userEmail":"[email protected]"
    },
    {
      "userEmail":"[email protected]"
    },
    {
      "userEmail":"[email protected]"
    },
  ];

Expected Output

List users = [
    {
      "userEmail":"[email protected]"
    },
    {
      "userEmail":"[email protected]"
    },
    {
      "userEmail":"[email protected]"
    },
  ];

CodePudding user response:

Let's try, here you get the unique list

void main() {
  var users = [
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
  ];
  var uniqueList = users.map((o) => o["userEmail"]).toSet();
  print(uniqueList.toList());
}

CodePudding user response:

Your attempts don't work because most objects (including Map) use the default implementation for the == operator, which checks only for object identity. See: How does a set determine that two objects are equal in dart? and How does Dart Set compare items?.

One way to make the List to Set to List approach work is by explicitly specifying how the Set should compare objects:

import 'dart:collection';

void main() {
  var users = [
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
  ];

  var finalList = [
    ...LinkedHashSet<Map<String, String>>(
      equals: (user1, user2) => user1['userEmail'] == user2['userEmail'],
      hashCode: (user) => user['userEmail'].hashCode,
    )..addAll(users)
  ];
  finalList.forEach(print);
}
  • Related