gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:19 35 4
gpt4 key购买 nike

Apache Commons Collections 的 4.0 版库添加了泛型支持。我在转换我的代码以利用它时遇到问题:

我想要一个 MultiValueMap 它以字符串作为键,以字符串集合作为值。但是:

  1. 键应该保留插入顺序(所以我创建了通过装饰一个多值 map LinkedHashMap )
  2. 值应该是每个键都是唯一的,并保留插入顺序(所以我想要values 集合类型为 LinkedHashSet ).

我能得到的最接近的是:

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

但这会产生错误:

The method multiValueMap(Map<K,? super C>, Class<C>) in the type MultiValueMap is not applicable for the arguments (LinkedHashMap<String,Collection<String>>, Class<LinkedHashSet>)

所以现在我陷入了泛型 hell 。欢迎提出任何建议。

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

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

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

最佳答案

我查阅了 Apache Commons Collections mailing list , 其中it was explained to me MultiValueMap 的接口(interface)已知是缺失的,但将在 4.1 版中进行改进(有关 JIRA 问题和相关讨论,请参阅 here)。

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

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

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

关于java - 使用自定义值集合类型创建 Commons Collections MultiValueMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22625575/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com