java - 是带有单个参数的 Java 方法来接收两个 HashMap 的值和 HashMap可能的?
问题描述
我想创建一个按键对 HashMap 进行排序的方法。HashMap 的键可以是 String 或 Long。两种 HashMap 类型的处理是类似的。为了避免代码重复,我想创建一个方法来处理这两种情况。
该方法的代码:
static LinkedHashMap<Long, Integer> sortNumberHashMapByKey(HashMap<Long, Integer> map){
ArrayList<Long> keys = new ArrayList<>(map.keySet());
ArrayList<Integer> values = new ArrayList<>(map.values());
Collections.sort(keys);
Collections.sort(values);
LinkedHashMap<Long, Integer> sortedMap = new LinkedHashMap<>();
for (Integer value : values) {
Iterator<Long> keyIt = keys.iterator();
while (keyIt.hasNext()){
Long key = keyIt.next();
if (map.get(key).equals(value)){
keyIt.remove();
sortedMap.put(key, value);
break;
}
}
}
return sortedMap;
}
是否可以创建一个带有单个参数的 Java 方法,该方法可以同时接收HashMap<String, Integer>
和HashMap<Long, Integer>
类型的值?
解决方案
您可以引入一个T
需要实现的Comparable<T>
,然后用Long
with替换任何用法T
:
static <T extends Comparable<T>> LinkedHashMap<T, Integer> sortNumberHashMapByKey(HashMap<T, Integer> map){
ArrayList<T> keys = new ArrayList<>(map.keySet());
ArrayList<Integer> values = new ArrayList<>(map.values());
Collections.sort(keys);
Collections.sort(values);
LinkedHashMap<T, Integer> sortedMap = new LinkedHashMap<>();
for (Integer value : values) {
Iterator<T> keyIt = keys.iterator();
while (keyIt.hasNext()){
T key = keyIt.next();
if (map.get(key).equals(value)){
keyIt.remove();
sortedMap.put(key, value);
break;
}
}
}
return sortedMap;
}
推荐阅读
- wagtail - 升级到 Wagtail 2.0.2 后,编辑页面上缺少 Streamfield UI
- c# - 如何将白色添加到 Web 视图背景
- python-3.x - 如果我离开'for'语句,数据将消失
- javascript - 如何监听自己触发的 Socket 事件
- java - 使用 DatePicker 的当前值作为另一个 DatePicker 的最小值/最大值
- c# - 在并发字典c#上工作的两个计时器
- python - css没有在webpy中加载
- android - 如何通过recyclerview中的所有视图进行重申?
- azure-service-fabric - Service Fabric 重新启动应用程序
- java - 是否可以在没有抽象方法的情况下执行接口?