Удаление неуникальных объектов из списка (определяется по свойству) - PullRequest
0 голосов
/ 20 января 2019

Я собираю события из потока, каждое событие - 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 и другие библиотеки, но безрезультатно, и яв надежде получить какое-то руководство.

Объект устройства содержит уникальный идентификатор и имя, которые можно использовать для фильтрации дубликатов

Вопрос: Как удалить дубликаты объектов из списка вДарт?

Заранее спасибо.

1 Ответ

0 голосов
/ 20 января 2019

Прежде всего вам необходимо определить, по каким критериям объекты должны быть уникальными. Например, есть ли идентифицирующее свойство? В этом случае должны работать следующие параметры.

Наиболее эффективный способ, вероятно, состоит в том, чтобы заставить подход работать. Для этого вам нужно будет превратить ваши объекты в объекты данных, что означает, что они идентифицируются на равенство по значениям свойств. Для этого вы должны переопределить оператор равенства и методы хэш-кода. Однако это меняет поведение ваших объектов при каждой операции равенства. Так что вам придется судить, подходит ли это. Смотрите эту статью .

Другой вариант - просто отфильтровать вручную по карте:

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...