Reputation: 261
I have a list of maps like this:
var associations = [{'name': 'EG', 'description': 'Evil Genius'},
{'name': 'NaVi', 'description': 'Natus Vincere'}];
var members = [
{'associationName': 'EG', 'firstName': 'Bob', 'lastName': 'Dylan', 'email': '[email protected]'},
{'associationName': 'NaVi', 'firstName': 'John', 'lastName': 'Malkovich', 'email': '[email protected]'},
{'associationName': 'EG', 'firstName': 'Charles', 'lastName': 'Darwin', 'email': '[email protected]'}
];
I would like to write a code that would sort the list of members alphabetically by the last name first, then by the first name. Moreover, I would like to be able to find members whose lastnames start with a specifiedd letter. By example, with D, we would get Bob Dylan and Charles Darwin. I am able to manage it with a single map or a single list, but combining a list of maps makes it more difficult.
Thanks for your help.
Upvotes: 26
Views: 15823
Reputation: 21
final data = [
EmployerModel(id: "1", image: "", name: "A"),
EmployerModel(id: "1", image: "", name: "A"),
EmployerModel(id: "1", image: "", name: "B"),
EmployerModel(id: "1", image: "", name: "B"),
EmployerModel(id: "1", image: "", name: "C"),
EmployerModel(id: "1", image: "", name: "E"),
EmployerModel(id: "1", image: "", name: "E"),
EmployerModel(id: "1", image: "", name: "E"),
EmployerModel(id: "1", image: "", name: "G"),
];
var firstAlph = data[0].name![0];
List<Map<String, dynamic>> d = [];
data.forEach((element) {
if (element.name![0] == firstAlph) {
if (d.isEmpty) {
d.add({
firstAlph: [element],
});
} else {
d.forEach((e) {
if (e.keys.contains(firstAlph)) {
e[firstAlph].add(element);
}
});
}
} else {
firstAlph = element.name![0];
d.add({
firstAlph: [element],
});
}
});
debugPrint(d.toString());
This will give a List in alphabetical order which will make you're UI look much better. Output example:
["A":[data,data,data],"B":[data,data,data]]
Upvotes: 1
Reputation: 1090
List<Map> myList = [
{ 'name' : 'ifredom','age':23},
{ 'name' : 'JackMa','age':61},
{ 'name' : 'zhazhahui','age':48},
];
myList.sort((a, b) => (b['age']).compareTo(a['age'])); /// sort List<Map<String,dynamic>>
print(myList);
Upvotes: 20
Reputation: 76273
To sort :
members.sort((m1, m2) {
var r = m1["lastName"].compareTo(m2["lastName"]);
if (r != 0) return r;
return m1["firstName"].compareTo(m2["firstName"]);
});
To filter :
members.where((m) => m['lastName'].startsWith('D'));
Upvotes: 45