为什么我的 CompareTo 因一般合同违规错误而崩溃? [复制]

2024-01-07

我正在尝试整理我的习惯NewsAdapter by a Date的财产Articles_Map对象,并且我注意到,在数据集较大的情况下,我的应用程序会崩溃java.lang.IllegalArgumentException: Comparison method violates its general contract! error.

我不确定该错误是否是由于以下原因发生的int溢出,或者是否确实与合约的传递性相关。特别是对于后者,我不知道如何解决它,因为据我所知,我已经处理了 3 种可能的结果(小于 0、0、大于 0)。

public class NewsAdapter extends ArrayAdapter<Articles_Map> {
    Context mContext;

    public NewsAdapter(Context c, int resource) {
        super(c, resource);
        this.mContext = c;
    }

    protected void doAdd(Articles_Map another) {
        super.add(another);
    }

    public void addAll(List<Articles_Map> others) {
        for (Articles_Map a : others) {
            this.doAdd(a);
        }
        this.sort(byPublishedAtComparator);
    }

    private static final Comparator<Articles_Map> byPublishedAtComparator =
            new Comparator<Articles_Map>() {
                @Override
                public int compare(Articles_Map o1, Articles_Map o2) {
                    // needs further testing in case of nulls
                    if (o1.publishedAt == null || o2.publishedAt == null) {
                        return 0;
                    }

                    return o1.publishedAt.compareTo(o2.publishedAt);
                }
            };
}

Your Comparator违反传递性要求,如果publishedAt is null.

假设您有三个实例Articles_Map:

  • a - 值为publishedAt
  • b - 与publishedAt == null
  • c - 值为publishedtAt大于as value

现在,如果您使用以下命令调用比较器a and b或与b and c,比较器返回0对于这两个电话。

为了满足传递性规则,您的比较器还必须返回0如果它被调用a and c。但自从上场publishedAt is not null对于两个对象,它将返回一个小于0如果按照描述准备。

要解决此问题,您的比较器不得返回0如果只有其中之一o1.publishedAt and o2.publishedAt is null.

例如:

private static final Comparator<Articles_Map> byPublishedAtComparator =
        new Comparator<Articles_Map>() {
            @Override
            public int compare(Articles_Map o1, Articles_Map o2) {
                // needs further testing in case of nulls
                if (o1.publishedAt == null) {
                    return (o2.publishedAt == null) ? 0 : -1;
                } else if (o2.publishedAt == null) {
                    return 1;
                }

                return o1.publishedAt.compareTo(o2.publishedAt);
            }
        };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 CompareTo 因一般合同违规错误而崩溃? [复制] 的相关文章

随机推荐

  • Power BI 嵌入 URL - 多个过滤器

    我一直在尝试使用过滤器查询语法来过滤嵌入的 PBI 报告 filter tableName fieldName eq fieldValue 这对我有用 但是 当我应用多个过滤器时 PBI 报告仅根据最后一个 filter 进行过滤 而其他过
  • 表“MyDjango.django_admin_log”不存在

    我无法在 django 应用程序中创建用户和博客 按下保存按钮时 它只是显示错误 表 MyDjango django admin log 不存在 错误消息如下所示 您最近是否启用了管理历史记录 但忘记运行syncdb 据我所知 Django
  • uilabel 尾部截断

    我正在使用 Objective C 开发一个 ios 应用程序 并且我遇到了 uilabel 的问题 我需要一些帮助 基本上我有一个标签 可以更改大小以适应它将显示的文本 但它有一个可能的最大高度 标签本身始终具有固定宽度 我已打开 UIL
  • 如何将视频从 URI 转换为 byte[]

    我已经捕获了视频并获得了该视频的 URI 如何加载该URI指向的内容到byte 结构 看一下 ByteArrayOutputStream http download oracle com javase 6 docs api java io
  • 3.1.4 textAlignment丢失(Android Studio)

    我有新版本的 Android Studio 3 1 4 但我找不到 textAlignment 我已经在 查看所有属性 中进行了搜索 现在就找人在我能找到的地方吧 谢谢回答 以下是我解决该问题的方法 在 Android Studio 3 3
  • JQuery 自动完成自定义显示多列第 2 部分

    我正在尝试获得类似于以下内容的自动完成功能 Here http jqueryui com demos autocomplete custom data在 jquery ui 的自定义示例中 相反 这将使用 ajax 调用而不是硬编码数据 我
  • 如何在核心数据中保存现有的单例表视图数据?

    我的项目中有这样的单例购物车var fromSharedFood SingletonCart sharedFood food 我正在从 MainVC 到 DetailVC gt MyCartVC 获取所有食物数据 我在 MainVC 中有表
  • 将 React 的不可变助手与 Immutable.js 结合使用

    我正在研究助焊剂应用并正在考虑采用不可变 js https github com facebook immutable js来维持状态 我看到 React 提供了自己的帮助器来更新不可变对象 http facebook github io
  • 如何在 Android Studio 中查找 Kotlin 的最新版本

    我打开了一个前段时间创建的 Android Studio 项目 IDE 说 Kotlin 的 gradle 插件支持 Kotlin 版本 1 2 51 或更高版本 我想将其设置为最新版本 但我必须去 Kotlin 网站 在该网站上不容易找到
  • C++ 声明顺序(在多变量声明行中)

    我在我的 C 代码中使用以下内容 int a 0 b a 我想知道这种行为是否可靠且定义良好 名称声明从左到右的顺序 并且我的代码不会与其他带有未申报的名字 error 如果不可靠 我会打破这个说法 int a 0 int b a 谢谢 我
  • 显示电子邮件地址和联系电话的安全方式

    是否有任何提示可以在联系表单网页上显示联系电话号码和电子邮件 我的页面上有一个联系表格 但也希望人们可以选择直接打电话或发送电子邮件 目前它们以纯文本显示 但感觉这是不安全的 并且对爬行网站以获取此类信息的机器人开放 有安全的方法吗 Tha
  • PHP - 设置带有签名验证的 Webhook 接收器

    我需要设置一个 PHP 页面来接收 Webhook 我过去已经做过很多这样的事情 所以这不是问题 但是我正在为这个项目使用的 API 要求我的 webhook 验证标头中提供的签名 作为验证请求的一部分 它将发送以下内容 HEADER x
  • 如何转储 SoapClient 请求或响应以进行调试?

    我需要调试一些使用的代码SoapClient班级 我发现方法记录如下 getLastRequest 但它只返回null client new SoapClient https example com service wsdl respons
  • Android 依赖项引用不存在的库 google-play-services_lib.jar

    我一直在尝试让一个简单的地图出现在应用程序中 如 Google 地图 v2 文档所示 这让我经历了一段糟糕的时光 Eclipse 不断地说 容器 Android 依赖项 引用不存在的库 X Android Development works
  • UIView alpha 与 UIColor alpha

    我想知道以下之间的区别 为我的 UIView 分配 alpha 值 为其指定不透明颜色 但为 UIView 指定 在屏幕截图上 我制作了两个 UIView 每个视图顶部都有两个黑色 alpha 1 0 UILabels 假设之前定义了一个宏
  • 为什么 gcc 会警告“self = [super initDesignatedInit];”不兼容的结构赋值在派生类中调用?

    我在 Objective C 中有以下基 派生类设置 interface ASCIICodeBase NSObject protected char code 4 Base initWithASCIICode const char code
  • 如何编写单元测试来确定对象是否可以被垃圾收集?

    和 关联我之前的问题 https stackoverflow com questions 578593 castle windsor will my transient component be garbage collected 我需要检
  • 如何在 Bootstrap 4 中创建页眉?

    自从 page header类在 Bootstrap 4 中已被弃用 如何创建与 Bootstrap 3 样式相同的页面标题 page header class 根据迁移文档 https getbootstrap com docs 4 0
  • 查找文件并仅打印其父目录

    我有以下命令 无论在哪里 user log文件存在 我们需要打印父目录 即hht and wee1 如何才能做到这一点 cd nfs office find name user log hht info user log wee1 info
  • 为什么我的 CompareTo 因一般合同违规错误而崩溃? [复制]

    这个问题在这里已经有答案了 我正在尝试整理我的习惯NewsAdapter by a Date的财产Articles Map对象 并且我注意到 在数据集较大的情况下 我的应用程序会崩溃java lang IllegalArgumentExce