【问题标题】:binary search on android.support.v7.util.SortedListandroid.support.v7.util.SortedList 上的二进制搜索
【发布时间】:2016-11-21 08:59:46
【问题描述】:

我正在使用 android.support.v7.util.SortedList 在 RecyclerView 上绑定数据。一切正常,除了当我尝试更新数据时,indexOf(obj) 总是返回 -1。

private int findItem(ZoneContactLoaderAdapter mAdapter, ContactModel contactModel) {

//        int index = Collections.binarySearch(mAdapter.getContactModel(), contactModel, new BinarySearchWithComparator());
        return mAdapter.getContactModel().indexOf(contactModel);
    }

逻辑是这样的:

 int position = findItem(zoneContactLoaderAdapter, notificationContactModel);
if (position < 0) {

                        ContactModel adapterContactModel = new ContactModel(conversationID, Constants.ACCOUNT_TYPE, conversationName, "", null, conversationName, conversationID, false);
                        updateAdapterModel(adapterContactModel, notificationContactModel);
                        zoneContactLoaderAdapter.getContactModel().add(adapterContactModel);

                    } else {
                        notificationContactModel.setIsConversation(true);
                        ContactModel adapterContactModel = zoneContactLoaderAdapter.getItem(position);
                        updateAdapterModel(adapterContactModel, notificationContactModel);
                        zoneContactLoaderAdapter.getContactModel().updateItemAt(position, adapterContactModel);
                    }

位置总是返回 -1 并复制数据。 从这个 thread 尝试了解决方案,它仍然无法正常工作。所以,我想以this 为例,在列表本身上实现自定义二进制搜索。但是collection只需要List。

有什么更好的方法可以在 android.support.v7.util.SortedList 上找到项目索引。谢谢

【问题讨论】:

    标签: java android


    【解决方案1】:

    SortedList 的 indexOf 方法在很大程度上依赖于包含的对象对 hashCode() 和 equals() 方法的正确实现。

    保留默认的 Object 实现几乎可以保证在您的情况下不起作用。

    您可以自己实现它们,您可以选择让 Android Studio 为您生成方法,或者您可以使用 Project Lombok 的 @EqualsAndHashCode 注解在编译时生成它们。可能还有其他选择 - 这些是首先想到的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多