如何将 HashMap 中的多个值分配给 Java 中的变量?

How to assign multiple value from HashMap to variables in Java?

我有一个 HashMap 并将键值对分配给变量,如下所示:

Map<UUID, EmployeeDTO> result = employeeService.getEmployees(employeeUuids);

UUID key = result.entrySet().iterator().next().getKey();
EmployeeDTO value = result.entrySet().iterator().next().getValue(); 

但是,我不确定从这个 HashMap 中分配多个值的正确方法是什么。我当然想到了一个循环,但是对于命名变量,也许会有更好的方法。有什么想法吗?

map.forEach((k, v) -> {
    UUID key1 = k;
    EmployeeDTO value1 = v;

    //  what about the other values?
    UUID key2 = k;
    EmployeeDTO value2 = v;
});

你应该使用像

这样的值列表
Map<UUID, List<EmployeeDTO>> result

然后

result.get(KEY).add(VALUE);

您现在可以为单个键设置多个值

你无法在不知道地图大小的情况下创建变量,因此你需要将键和值存储在两个单独的数据结构中,例如 List:

List<UUID> keys = new ArrayList<>();
List<EmployeeDTO> values = new ArrayList<>();
map.forEach((k, v) -> {
    keys.add(k);
    values.add(k);
});

如果地图的大小已知,您可以将条目存储在列表中并分配相应的键和值:

List<Map.Entry<UUID, EmployeeDTO>> entriesList = new ArrayList<>(map.entrySet());

UUID key1 = entriesList.get(0).getKey();
EmployeeDTO value1 = entriesList.get(0).getValue();

UUID key2 = entriesList.get(1).getKey();
EmployeeDTO value2 = entriesList.get(1).getValue();

// etc.

显然您需要为每个 key/value 执行此操作。理论上可以在保存变量的对象上使用循环和一些讨厌的反射,但这弊大于利。

您不能动态创建局部变量,如 key2key3。您需要一个数据结构,例如 List。一个例子:

List<UUID> uuids = new ArrayList<>(result.size());
List<EmployeeDTO> employees = new ArrayList<>(result.size());
result.forEach((k,v)->{
    uuids.add(k);
    employees.add(v);
});

然后您可以使用 uuids.get(0)uuids.get(1) 等访问它们,employees.get(i) 也是如此。