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

标签 flutter dart

我在对象中有两个 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")
]

最佳答案

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

import 'package:flutter/foundation.dart';

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

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

This means myContactsModel class must override hashCode and ==.

具有相等性的示例模型类。您可以找到覆盖 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;
  }
}

关于flutter - 如何按属性值比较两个对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69404517/

相关文章:

android - 我可以使用 Android studio Avd 管理器在 Windows 上运行 iOS 模拟器吗?

flutter - 当使用 setState() 出现 setState() 回调参数时返回一个 Future

dart - 带有嵌套 AnimatedList 的 Firestore StreamBuilder

android - 在模块 guava-26.0-android.jar 中发现重复的类 com.google.common.util.concurrent.ListenableFuture

dart - Flutter VideoPlayerController "setState() or markNeedsBuild() called during build."

android - 如何强制关闭 GetX Snackbar?

flutter - 我需要在 Flutter App 中的什么位置存储照片图像?

dart - 如何查看已安装的 Flutter 版本?

flutter - 如何使用 googleSignIn future 方法中的命名路由进行导航?

firebase - 如何在Flutter Firebase App中捕获DatabaseError