kos*_*tja 16 java collections hashmap
我已经知道如何以艰难的方式完成它并使其工作 - 迭代条目并"手动"交换.但我想知道,像这么多任务一样,这个问题能否以更优雅的方式解决.
我读过这篇文章,遗憾的是它没有优雅的解决方案.我也没有可能使用任何花哨的Guava BiMaps或jdk以外的任何东西(已经定义了项目堆栈).
我可以假设我的地图是双射的,顺便说一下:)
小智 34
Map<String, Integer> map = new HashMap<>();
Map<Integer, String> swapped = map.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));
Run Code Online (Sandbox Code Playgroud)
Eya*_*der 22
如果您没有选择使用第三方库,我不认为以下代码如此丑陋(尽管一些脚本语言确实有优雅的方法):
//map must be a bijection in order for this to work properly
public static <K,V> HashMap<V,K> reverse(Map<K,V> map) {
HashMap<V,K> rev = new HashMap<V, K>();
for(Map.Entry<K,V> entry : map.entrySet())
rev.put(entry.getValue(), entry.getKey());
return rev;
}
Run Code Online (Sandbox Code Playgroud)
标准API/Java运行时不提供双向映射,因此唯一的解决方案是迭代所有条目并手动交换它们.
你可以做的是创建一个包装器类,它包含两个映射,并在put()内部执行双重操作,因此您可以快速获得两个数据视图.
[编辑]此外,由于开源,您不必包含第三方库,您只需将您需要的类复制到您自己的项目中.
| 归档时间: |
|
| 查看次数: |
34766 次 |
| 最近记录: |