我有一个包含几个属性的对象列表。我希望将列表分成几个由具有相同子属性的对象组成的列表。
这是一个假设的示例,假设我有一个Cars
的列表。每个Car
具有以下属性:id
,manufacturerId
和color
。
我想为具有匹配的Cars
属性的用户创建manufacturerId
的列表。
我尝试在list.where
中使用list.forEach
创建新的子列表,但是我得到了重复的列表,因为当我要与之比较的属性(A)与另一个属性(B)匹配时,我在以下情况下获得另一个子列表:
B = A。
答案 0 :(得分:2)
您可以使用package:collection
中的groupBy
var carsByManufacturer = groupBy(cars, (car) => car.manufacturerId);
这将创建一个Map
,其中键为manufacturerID
,值是该制造商的汽车清单。
然后,
for (final manufacturerEntry in carsByManufacturer) {
final key = manufacturerEntry.key;
final value = manufacturerEntry.value;
final listOfCarsFromSameManufactuer = List.from(entry.value);
...
}
您现在将拥有一个名为listOfCarsFromSameManufactuer
的列表。