这是一个肮脏的解决方案 (是的 - 非常肮脏,永远不要在生产中这样做!),但如果密钥具有不同类型并且一个不是另一个的子类型(例如long和String),它就会起作用。将每个员工的两个密钥放在一起,并通过提供的密钥获取,id或者name:
Map<?, List<Employee>> map = new HashMap<>();
public void putEmployee(Employee e) {
map.put(e.id, Arrays.asList(e)); // put by id
if (!map.containsKey(e.name)) {
map.put(e.name, new ArrayList<>());
}
map.get(e.name).add(e); // put by name
}
public Employee getById(long id) {
return map.containsKey(id) ? map.get(id).get(0) : null;
}
public List<Employee> getByName(String name) {
return map.containsKey(name) ? map.get(name) : Collections.emptyList();
}
Run Code Online (Sandbox Code Playgroud)
在生产代码中,我将使用两个单独的地图或自定义字典类。
| 归档时间: |
|
| 查看次数: |
590 次 |
| 最近记录: |