Java HashSet 具有自定义相等标准? [复制]

2024-04-28

我一直在寻找类似于 Java TreeSet 在实例化时接收自定义比较器的能力,因此我不需要使用对象的默认相等(和哈希码)标准。

我能想到的最接近的方法是将我的对象包装在一个私有的自定义类中,但这看起来很老套:(这最终成为编程时的一种反复出现的主题,所以我想知道是否有一些东西已经可供我们使用。也许在公共图书馆?

Thanks


不,您已经找到了您应该使用的解决方案。

即使是TreeSet, it's 皱起眉头 http://docs.oracle.com/javase/6/docs/api/java/util/SortedSet.html使用不兼容的比较标准equals:

请注意,如果排序集要正确实现 Set 接口,则排序集维护的顺序(无论是否提供显式比较器)必须与 equals 一致。

我不知道 Apache Commons,但 Guava具体来说 https://code.google.com/p/guava-libraries/issues/detail?id=188#c9 rejected https://code.google.com/p/guava-libraries/issues/detail?id=576#c17对此类事情的请求,尽管您可以使用来实现您想要的番石榴等效物 https://guava.dev/releases/28.0-jre/api/docs/com/google/common/base/Equivalence.html:

Equivalence<T> equivalence = new Equivalence<T>() {
    @Override
    protected boolean doEquivalent(T a, T b) {
        return CustomComparator.equals(a, b);
    }

    @Override
    protected int doHash(T item) {
        return CustomHashCodeGenerator.hashCode(item);
    }
};
List<T> items = getItems();
Set<Equivalence.Wrapper<T>> setWithWrappedObjects = items.stream()
    .map(item -> equivalence.wrap(item))
    .collect(Collectors.toSet());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java HashSet 具有自定义相等标准? [复制] 的相关文章

随机推荐

  • WP8 + 将文件上传到 Skydrive

    我正在尝试将一个简单的 cer 文件上传到 SkyDrive 不管LiveConnectClient Method我用了 没有任何反应 没有编译 运行时或其他异常 我的应用程序从未收到LiveOperationResult 我正在使用模拟器
  • 如何显示 Jupyter 笔记本的版本并在 Jupyter 笔记本中运行单元?我收到错误:错误的解释器

    我已经安装了 Anaconda 并使用 conda 环境和 conda 命令来安装软件 当我输入 jupyter notebook version 我收到以下错误 zsh Users cr517 local bin jupyter bad
  • 如何基于Vuetify创建自己的组件库

    我想基于 Vuetify 创建我的组件库并在 npm 上发布 Vuetify 已经有 vue plugin 标准安装并使用 vuetify loader 我认为这是一个比纯 HTML 组件更复杂的场景 例如 我想创建我的登录表单 my 文章
  • 如何检测并突出显示鼠标悬停时的矩形

    我在 C net 中创建了一个 Windows 应用程序控件 以图形模式显示一些对象 为此 我根据列表中的项目数量创建了一个矩形 并使用 Control OnPaint 事件将其绘制在控件上 现在 如果鼠标悬停在该矩形上 我想突出显示该矩形
  • Kubernetes:无法创建存储库

    我正在跟进Kubernetes 入门指南 http kubernetes io docs hellonode 一切都很顺利 直到我跑步 gcloud docker push gcr io
  • 将文件转换为 Ascii 抛出异常

    后果我之前的问题 https stackoverflow com questions 31742609 how to strip the leading unciode characters from a file 31742694 nor
  • 如何设置 QTableView 中特定单元格的线条样式?

    我正在使用 QT GUI 我正在使用 QTableView 实现一个简单的十六进制编辑控件 我最初的想法是使用一个有十七列的表格 表的每一行都有 16 个十六进制字节 然后在第十七列中显示该数据的 ASCII 表示形式 理想情况下 我想编辑
  • YouTube Data API v3 没有资源的唯一 ID

    这让我很困惑 而且看起来有点可笑 当我在数据 API 上执行两个不同的查询时 以活动列表端点 https developers google com youtube v3 docs activities list作为概念证明 id请求之间的
  • 控制 n 个重叠区域的 alpha 混合/不透明度

    我很难理解 和控制 alpha 的混合 不幸的是 alpha 值并不是简单地 相加 0 5 0 5 不是 1 但我怎样才能做到这一点呢 目的是定义重叠区域相对于观测总数的 绝对 灰度值 请参见下面的示例 我尝试设置scale alpha r
  • 如何将表达式传递给ggplot中的geom_text标签? (继续)

    这是我的后续原问题 https stackoverflow com questions 63813557 how to pass an expression to a geom text label in ggplot了解如何将带下标的表达
  • 控制器对延迟作业的操作

    我正在上传一个制表符分隔的文档并在控制器中进行处理 一切正常 但处理大文件可能需要一些时间 我想将其移至delay job 我在应用程序的其他地方工作 但由于这是在控制器中 因此无法以相同的方式调用 该表单调用 process file 操
  • XSD 到 XForms 以及 XForms 到 XSD 转换

    目前我正在努力解决两个问题 我从外部服务器接收到一个 XSD 文件 并且基于该文件我必须生成 XForm 通常 XSD 文件会导入许多其他 XSD 文件等等 我正在使用 XForm 构建器编写 GUI 当用户构建他的自定义 XForm 时
  • Ember 组件在路由或控制器中调用操作

    我有一个组件 其主要目的是显示一行项目 每行都有一个删除按钮 可以删除一行 如何将操作从模板传递到将在路由器中触发操作的组件 这是使用该组件的模板 templates holiday hours hbs each model as holi
  • jquery mobile取消302重定向到外部站点

    我正在尝试将 DotNetOpenAuth 与使用 jquery mobile 的网站集成 我遇到了一个问题 jquery mobile 似乎正在取消到服务器响应的提供方 外部站点 的 302 重定向 我尝试在 mobileinit 事件中
  • 为什么弹性物品会包裹而不是收缩?

    我想知道是否有人可以给我一个关于如何计算 Flexbox 布局的简单介绍 特别是优先级顺序 例如 div style display flex div style height 200px background color lightgre
  • gcc 无效版本(最大)错误添加符号:错误值

    我已经在 Linux x86 x64 上成功构建了几个 32 位静态和共享库 现在我尝试将它们链接到一个可执行文件 但出现以下错误 usr bin ld foo so moddi3 invalid version 21 max 0 foo
  • 在 Mathematica 中创建具有不同颜色边的图形

    我想创建一个图 图论 其中某些边具有与其他边不同的颜色 这将用于突出显示图中从一个顶点到另一个顶点的路径 以下是一些具有不同颜色边缘的示例http demonstrations wolfram com AGraphTheoryInterpr
  • 如何使用Sinon监视导入的函数?

    假设我们想使用 Sinon 测试另一个函数是否调用了一个特定函数 fancyModule js export const fancyFunc gt console log fancyFunc export default const fan
  • 推荐一个适用于 Flex 和 AIR 的 HTML 友好的 RichTextEditor? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java HashSet 具有自定义相等标准? [复制]

    这个问题在这里已经有答案了 我一直在寻找类似于 Java TreeSet 在实例化时接收自定义比较器的能力 因此我不需要使用对象的默认相等 和哈希码 标准 我能想到的最接近的方法是将我的对象包装在一个私有的自定义类中 但这看起来很老套 这最