【问题标题】:Compare two list object but some of the object param is nul比较两个列表对象,但某些对象参数为空
【发布时间】:2018-07-04 08:03:51
【问题描述】:

在问之前我也看到了this question。但我没听懂。

我有两个列表。

List<Contact> serverContacts

serverContacts 有 4 个项目 和

List<Contact> phoneContact

有 20 件物品。

我的联系人模型是

private String firstName;
private String id;
private String lastName;
private LinkedUser linkedUser;
private String cellphoneNumber;
private String email;
private String uniqueId;
private long notSeenDuration;
private boolean hasUser;

这是比较的方法

List<Contact> serverContacts = adapter.fromJson(chatMessage.getContent());
if (serverContacts != null) {
    List<Contact> phoneContact = getPhoneContact(getContext());
    for (int i = 0; i < phoneContact.size(); i++) {
        if (serverContacts.size() > i) {
            if(phoneContact.get(i).getCellphoneNumber().equals(serverContacts.get(i).getCellphoneNumber())) {
                System.out.println("Match Found " + i);
            }
        }
    }
}

我的phone contact 列表只需填写Contact 模型的两个参数,cellphoneNumberfirstName。 因为这两个列表的两个对象并不完全相同,我的意思是这两个列表中只有一个具有相同的cellphoneNumber。然后我尝试根据cellphoneNumber比较这两者。

我认为当它们的大小相同时这可能会起作用。!!

【问题讨论】:

  • 您正在检查可能不相同的两个数组列表的完全相同的位置。我建议迭代一个以获得结果
  • @Mohit 你觉得它快吗?
  • 是的,它也是正确的方法.. 通过这种方式,您可以将一个项目的每个项目与每个项目或其他不能轻易让您失望的项目进行比较
  • Ans 这种方法用于排序,因此也很简单快速

标签: java android


【解决方案1】:

试试这个:

    List<Contact> serverContacts = adapter.fromJson(chatMessage.getContent());
    if (serverContacts != null) {
        List<Contact> phoneContact = getPhoneContact(getContext());
        for (int i = 0; i < serverContacts.size(); i++) {
            for (int j = 0; j < phoneContact.size(); j++) {
                if(serverContacts.get(i).getCellphoneNumber().equals(phoneContact.get(j).getCellphoneNumber())) {
                    System.out.println("Match Found " + i);
                    break;
                }
            }
        }
    }

【讨论】:

  • 此解决方案无法扩展,很快就会成为性能瓶颈。更好地使用 HashSet 和 contains。
  • @BluEOS 在这种情况下,两个列表只有 4 个和 20 个元素,因此我认为这种方式更快更容易实现他的目标。
  • 为什么不,但使用 for(Contact c1 : serverContacts) 和 for(Contact c2 : phoneContacts) 以便在每个循环步骤中不调用 size() ...据我了解,代码是在 Android 设备上运行,我们都知道它们有多慢。
【解决方案2】:

我会推荐一个两步解决方案。

    • 用您的服务器联系人填充 HashSet
    • 用您的手机联系人填充 HashSet
    • 迭代电话 HashSet 并检查(使用 contains 方法)电话号码是否在服务器联系人 HashSet 中。

【讨论】:

    猜你喜欢
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多