根据匹配的对象属性从列表创建列表

Posted

技术标签:

【中文标题】根据匹配的对象属性从列表创建列表【英文标题】:Create Lists from List based on Matching Object Properties 【发布时间】:2019-12-13 11:27:55 【问题描述】:

我有一个包含多个属性的对象列表。我希望将列表分成几个列表,这些列表由具有相同子属性的对象组成。

这是一个假设的例子,假设我有一个Cars 的列表。每个Car 都有属性:idmanufacturerIdcolor

我想为具有匹配manufacturerId 属性的人创建Cars 列表。

我尝试在list.forEach 中使用list.where 来创建新的子列表,但是我得到了重复的列表,因为当我比较的属性(A)与另一个属性(B)匹配时,我得到另一个子列表列出时间:

B = A。

【问题讨论】:

【参考方案1】:

你可以从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 的列表。

【讨论】:

以上是关于根据匹配的对象属性从列表创建列表的主要内容,如果未能解决你的问题,请参考以下文章

根据自定义对象属性从数组列表中删除元素

根据对象列表生成新卡片

根据对象列表创建一个csv文件C#

根据多选列表从数据库中查询所有匹配的值

Python:根据属性对对象列表进行排序

根据JAVA列表内对象的属性将新对象添加到对象列表中