使用自定义值集合类型创建 Commons Collections MultiValueMap

2023-12-24

4.0版本的发布Apache 共享集合 http://commons.apache.org/proper/commons-collections/库添加了泛型支持。我在转换代码以利用它时遇到问题:

我想要一个MultiValueMap http://commons.apache.org/proper/commons-collections/javadocs/api-release/org/apache/commons/collections4/map/MultiValueMap.html它以字符串为键,以字符串集合为值。但:

  1. 键应保留插入顺序(因此我创建了 通过装饰一个多值地图LinkedHashMap http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html)
  2. 这些值应该是 每个键都是唯一的并保留插入顺序(所以我想要 值集合类型为LinkedHashSet http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html).

我能得到的最接近的是:

MultiValueMap<String, String> orderedMap = MultiValueMap.multiValueMap(
    new LinkedHashMap<String, Collection<String>>(), 
    LinkedHashSet.class
);

但这会产生错误:

方法multiValueMap(Map<K,? super C>, Class<C>)在类型中MultiValueMap不适用于参数(LinkedHashMap<String,Collection<String>>, Class<LinkedHashSet>)

所以现在我陷入了仿制药地狱。任何建议都将受到欢迎。

在 4.0 版本之前,我通过以下方式实现了这一点:

MultiValueMap orderedMap = MultiValueMap.decorate(
    new LinkedHashMap<>(), 
    LinkedHashSet.class
);

简单的!我提供LinkedHashMap装饰用MultiValueMap行为,并指定集合的​​类型(LinkedHashSet) 用作值。但这需要在我打电话时进行转换put() and get()所以我希望能够使用 4.0 提供的新通用版本。


我查阅了 Apache Commons Collections邮件列表 http://commons.apache.org/proper/commons-collections/mail-lists.html, where 有人向我解释了 http://mail-archives.apache.org/mod_mbox/commons-user/201403.mbox/%3C5333D2B7.5010201@gmail.com%3E该接口用于MultiValueMap已知存在缺陷,但将在 4.1 版本中进行修改(请参阅here https://issues.apache.org/jira/browse/COLLECTIONS-508用于 JIRA 问题和相关讨论)。

因此,将来我们可能会有更好的解决方案,但与此同时,正如 Rohit Jain 在他的回答中提到的那样,我们只需要抑制一些警告。然而,由于类型安全的关键方面是MultiValueMap(不是自定义集合类型),实现此目的最简单的方法是:

@SuppressWarnings({ "rawtypes", "unchecked" })
MultiValueMap<String, String> orderedMap = 
    MapUtils.multiValueMap(new LinkedHashMap(), LinkedHashSet.class);

注意使用MapUtils工厂方法,而不是更直接的方法MultiValueMap我在原来的问题中使用过它。

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

使用自定义值集合类型创建 Commons Collections MultiValueMap 的相关文章

随机推荐

  • 自定义验证器在 FormView 中工作吗?

    我通过谷歌搜索发现很多人都在为这个问题苦苦挣扎 但我仍然没有找到正确的答案 https i stack imgur com 15jen png https i stack imgur com 15jen png 我有一个表单视图 需要检查语
  • Django ORM 中 ImageField 的默认图像

    我正在使用一个ImageField将个人资料图片存储在我的模型上 如果没有定义图像 如何设置它返回默认图像 我还没有尝试过这个 但我相对确定您可以将其设置为您所在领域的默认值 pic models ImageField upload to
  • 是否有适用于 Delphi-XE 的 LockBox 版本

    在哪里可以找到适用于 Delphi XE 的 LockBox 版本 有 Delphi 2010 版本可用Songbeamer com http www songbeamer com delphi 根据我将 Abbrvia 移植到 Delph
  • 如何生成给定集合的幂集?

    我正在为面试而学习 我在网上的 数学 类别下偶然发现了这个问题 生成给定集合的幂集 int A 1 2 3 4 5 int N 5 int Total 1 lt lt N for int i 0 i lt Total i for int j
  • DataGridView 在最后一行之后显示一些额外的空间

    我有一个Panel我在其上放置了一个控件DataGridView控件 显示来自 SQL Server 的数据 它工作得很好 除了当我将滚动条移动到底部时出现不必要的空间 我缩短了高度 但空间仍然存在 My DataGridView以编程方式
  • (sql) 当数据类型为文本时如何使用 count() 方法?

    select count category from list where category like action 上面是我想要运行的查询 但是 当我运行该查询时 我得到 数据类型错误 有没有其他方法count 或者 我该如何使用coun
  • 寻找将变量插入对象(如果不为空)的简写

    我经常有几个命名变量 如果它们不为空或未定义 我想将它们放入一个对象中 JavaScript 有几个很好的构建对象的快捷方式 所以我想一定有一个适合这个用例的快捷方式 我通常会做这样的事情 但它是如此冗长 function foo a b
  • 表变量可以用在 select 语句的 where 子句中吗?

    我有一个正在执行两步查询的存储过程 第一步是从表中收集 VARCHAR2 类型字符的列表 并将它们收集到表变量中 定义如下 TYPE t cids IS TABLE OF VARCHAR2 50 INDEX BY PLS INTEGER v
  • 多对多自引用表

    有没有好的方法来实现单表中行之间的多对多关系 示例 存储单词同义词的表 list of words CREATE TABLE word id integer PRIMARY KEY word varchar 32 NOT NULL UNIQ
  • 将文件 bin\EntityFramework.SqlServer.xml 复制到 ..\bin\EntityFramework.SqlServer.xml 时出错失败

    当我尝试发布 ASP NET MVC 4 项目时 出现以下错误 错误 1 将文件 bin EntityFramework SqlServer xml 复制到 obj Debug Package PackageTmp bin EntityFr
  • 在C++中通过迭代器从向量中获取相邻的元素对

    我想迭代向量中的所有相邻对元素 例如 如果我有一个向量 1 2 3 4 我希望我的迭代器返回以下内容 1 2 2 3 3 4 我知道如何使用以下命令一次迭代一个元素 vector
  • pandas 重新定义 isnull 以忽略 'NA'

    作为数据分析练习的一部分 我正在将 Excel 工作表读入 pandas 数据框 df pd ExcelFile file xlsx parse 0 nullcounts df isnull sum to frame null record
  • 如何实现霍夫变换?

    如何实施霍夫变换 http en wikipedia org wiki Hough transform在文本图像上 我正在寻找伪代码 最终这将在java中 以下是一些背景信息 给定图像 确定直线的方程y mx b 通常 霍夫变换以极坐标表示
  • 是否可以反转显示的顺序错误?

    当使用 GHC 编译有错误的程序时 错误会按升序显示 这会导致第一个错误被推到控制台上 因此如果您首先修复第一个错误 则需要向上滚动 这可能很烦人 是否可以要求 GHC 按行降序打印错误 您可以使用 freverse errorsGHC 编
  • Echarts3(百度)工具提示中的彩色圆形

    Echarts3 百度 工具提示中的彩色圆形 默认情况下 工具提示具有与图形相同颜色的圆形 如下所示 http echarts baidu com gallery editor html c candlestick brush http e
  • NSXMLParser:非 ASCII 字符的意外结果

    我正在尝试通过 REST Web 服务下载 XML 格式的数据 我已经使用 NSXMLParser 创建了解析器 并在 TableView 中可视化数据 当我在 XML 文档中遇到带有重音的句子时 我遇到了问题 在我发现的一些研究中this
  • git diff HEAD 和 HEAD~ 区别[重复]

    这个问题在这里已经有答案了 我正在搜索工作树和上次提交之间的差异 并在 Stackoverflow 上发现了这个已接受的答案 有人可以解释一下 HEAD 和 HEAD 实际上指的是什么吗 因为答案中没有解释 我无法从谷歌中弄清楚 Thank
  • Django 无法在“默认”以外的其他数据库中创建超级用户

    这是一个错误还是我错了 我正在创建一个超级用户 但 django 想要在错误的数据库中创建一个表 尽管我的路由器似乎可以工作 设置 py DATABASES intern db ENGINE mysql connector django N
  • 设置 .NET Web 服务的超时值

    我有一个用 C 编写的 Web 服务 位于 SharePoint 网站上 我使用以下代码修改了 web config
  • 使用自定义值集合类型创建 Commons Collections MultiValueMap

    4 0版本的发布Apache 共享集合 http commons apache org proper commons collections 库添加了泛型支持 我在转换代码以利用它时遇到问题 我想要一个MultiValueMap http