Merge two lists of objects in Dart

448
class Person{ 
  final String name;
  int counter;
  Person({required this.name, required this.counter});
}

extension on List<Person> {
  void addPerson({required String name, required int counter}) {
    if (isNotEmpty) {
      try {
        var person = firstWhere((p) => p.name == name);
        person.counter += counter;
      } catch(e) { 
        add(Person(name:name, counter: counter));
      }
    } else {
      add(Person(name:name, counter: counter));
    }
  }
}

void main() {
  var theList = <Person>[];

  theList.addPerson(name:"Lucho", counter: 4);
  theList.addPerson(name:"Ben", counter: 2);
  theList.addPerson(name:"Ben", counter: 5);  
  
  print(theList);
  print(theList.length);
  print("${theList[1].name} - ${theList[1].counter}");  
}

Result:

[Instance of 'Person', Instance of 'Person']
2
Ben - 7
Share:
448
Ali Kortak
Author by

Ali Kortak

Updated on December 30, 2022

Comments

  • Ali Kortak
    Ali Kortak over 1 year

    I have objects which have a parameter name and a parameter counter. Those objects are stores inside a list. Some of the items in my list have the duplicate parameter "name". I want to remove the duplicates inside the list and add the counter of that duplicate to the duplicate-objects parameter.

    class Person{ 
    Person({this.name, this.counter)};
      String name;
      int counter;
    }
    
    List<Person> theList = [];
    
    theList.add(Person(name:"Ben", counter: 2);
    theList.add(Person(name:"Ben", counter: 5);
    
    //I need a function that changes the List to show Ben with counter 7