class User {
String username;
String password;
final int age;
User(this.username, this.password, this.age);
}
void main() {
List<User> list = [
User("zhangsan", "123456", 18),
User("wangwu", "789456", 18)
];
Map<int, List<User>> map = new Map.fromIterable(list,
key: (key) => key.age,
value: (value) {
return list.where((item) => item.age == value.age).toList();
});
map.forEach((k,v) {
print('$k --- ${v.map((value) => value.username).join(",")}');
});
}
使用Map.fromIterable函数,创建的是LinkedHashMap,传入三个参数,第一个可迭代的集合就是原数据,命名参数key,命名参数value,都是两个函数,代码也比较简单。理解就行
新版的写法dart中提供了一个函数groupBy() 顶层方法可以将集合分组
第一个参数是需要分组的集合,第二个是个函数,构建Map的key,在此场景中理解为将哪个字段设置为key
需要引入这个插件collection: ^1.16.0
版本自己选吧
导入的包是import 'package:collection/collection.dart';
Map<int, List<User>> ageMapperUsers = groupBy(list, (user) => user.age);