如何按属性值比较两个对象列表

本森 OO

我在对象中有两个 myContactsModal 列表,即

List<myContactsModel> allContacts=[myContactsModel(displayName: "ABC",
                phoneNumbers: "1234"),myContactsModel(displayName: "EFG",
                phoneNumbers: "12345"),myContactsModel(displayName: "Test",
                phoneNumbers: "78923")];
List<myContactsModel> chekList =[myContactsModel(displayName: "ABC",
                phoneNumbers: "8973"),myContactsModel(displayName: "BHGS",
                phoneNumbers: "12347872")];

我想要实现的是比较这两个列表,如果 checkLists 中具有相同 displayName 的元素存在于 allContacts 数组中,我想更新 allContacts 列表中的该元素,如果它不存在于 allContacts 列表中,则应在 allContacts 列表中添加新条目。输出应该是:

List<myContactsModel>allContacts=[
 myContactsModel(displayName: "ABC",
            phoneNumbers: "8973"),
 myContactsModel(displayName: "EFG",
            phoneNumbers: "12345"),
 myContactsModel(displayName: "Test",
            phoneNumbers: "78923"),
 myContactsModel(displayName: "BHGS",
            phoneNumbers: "12347872")
]
nitishk72

要与 Dart 中的列表进行比较,我们需要使用此函数

import 'package:flutter/foundation.dart';

if(listEquals(allContacts, chekList)){
    print('List is Equal');
}else{
    print('List is not Equal');
}

如果您的模型类没有覆盖具有相等性,则在一种情况下这将无法正常工作。

这意味着myContactsModelclass 必须覆盖hashCode==

具有相等性的示例模型类。您可以找到覆盖hashCode并且==它也必须在您的模型类中。

class myContactsModel {
  final int id;
  final String name;
  final String email;

  myContactsModel({
    required this.id,
    required this.name,
    required this.email,
  });

  // This must be there
  @override
  bool operator ==(Object other) {
    if (identical(this, other)) return true;

    return other is myContactsModel &&
        other.id == id &&
        other.name == name &&
        other.email == email;
  }

  // This must be there
  @override
  int get hashCode {
    return id.hashCode ^ name.hashCode ^ email.hashCode;
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章