我正在从流中捕获事件,每个事件都是Device Object
。流的工作方式是在计时器上,因此它可以多次拾取同一台设备并添加到流中。
我要把所有List<Device>
放到另一个流中。
我创建了一个StreamTransformer
,试图从列表中删除重复项,然后将唯一列表添加回流中。
下面的此转换代码,我尝试添加到set并返回到list,但是由于它们是对象而不是字符串,因此我认为这没有用。
//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和其他库,但无济于事,希望能提供一些指导。
设备对象包含可用于过滤的唯一ID和名称 重复重复
问题:如何从Dart中的列表中删除重复的对象?
谢谢。
答案 0 :(得分:1)
首先,您需要定义根据哪些标准对象应该是唯一的。例如,是否有识别属性?在这种情况下,以下选项应该起作用。
最有效的方法可能是使一组方法一起工作。为此,您需要将您的对象变成数据对象,这意味着让它们通过属性值来标识是否相等。为此,您将覆盖均等运算符和哈希码方法。但是,这会改变对象在每个相等操作上的行为。因此,您必须判断这是否合适。参见此article。
另一种选择是使用地图手动过滤:
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();
}