【问题标题】:How to assign multiple value from HashMap to variables in Java?如何将 HashMap 中的多个值分配给 Java 中的变量?
【发布时间】:2022-02-01 11:20:21
【问题描述】:

我有一个 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;
});

【问题讨论】:

  • 您不能动态创建像key2key3 这样的局部变量。您需要一个数据结构,例如 List

标签: java stream hashmap


【解决方案1】:

在不知道映射大小的情况下无法创建变量,因此需要将键和值存储在两个单独的数据结构中,例如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.

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

【讨论】:

    【解决方案2】:

    您不能动态创建像 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) 也是如此。

    【讨论】:

    • @fish_and_chips 非常感谢朋友。我会投票,但不幸的是没有足够的声誉。请为我的问题投票?
    【解决方案3】:

    您应该在值中使用列表,例如

    Map<UUID, List<EmployeeDTO>> result
    

    然后

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

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

    【讨论】:

    • 问题不是要求每个键有多个值。
    • @fish_and_chips 是的,但它仍然很有用,值得投票。所以,我会投票,但不幸的是没有足够的声誉。请为我的问题投票?
    • @IQbrod 非常感谢朋友。我会投票,但不幸的是没有足够的声誉。请为我的问题投票?
    猜你喜欢
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多