gpt4 book ai didi

list - 从列表中删除非唯一对象(可通过属性识别)

转载 作者:IT王子 更新时间:2023-10-29 06:43:18 24 4
gpt4 key购买 nike

我正在从流中捕获事件,每个事件都是一个 Device Object .流的工作方式是它在计时器上,因此它会多次拾取同一设备并添加到流中。

我把所有的都放在一个List<Device>并将其放入另一个流中。

我创建了一个 StreamTransformer尝试从列表中删除重复项,然后将唯一列表添加回流中。

下面的这个转换代码,我试图添加到集合并返回到列表,但我认为这没有用,因为它们是对象而不是字符串。

  //Transform Stream List by removing duplicate objects
final deviceList = StreamTransformer<List<Device>, List<Device>>.fromHandlers(
handleData: (list, sink) {
List<Device> distinctList = list.toSet().toList();
sink.add(distinctList);
});

我曾尝试使用 .where 和其他库,但无济于事,希望得到一些指导。

Device Object contains unique id and name that could be used to filter out duplicates

Question: How can I remove duplicate objects from a List in Dart?

提前致谢。

最佳答案

首先,您需要定义对象的唯一性标准。例如,是否有识别属性?如果是这种情况,以下选项应该有效。

最有效的方法可能是使方法与集合一起工作。为此,您需要将对象转换为数据对象,这意味着让它们通过属性值来识别是否相等。为此,您将覆盖相等运算符和 hashCode getter。但是,这会改变您的对象在每个相等操作上的行为方式,因此您必须判断这是否合适。看这个article .

另一种选择是使用 Map 手动过滤:

class MyObj {
String val;

MyObj(this.val);
}

TestListFiltering(){
List<MyObj> l = [
MyObj("a"),
MyObj("a"),
MyObj("b"),
];
// filter list l for duplicate values of MyObj.val property
Map<String, MyObj> mp = {};
for (var item in l) {
mp[item.val] = item;
}
var filteredList = mp.values.toList();
}

关于list - 从列表中删除非唯一对象(可通过属性识别),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54272330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com