为了账号安全,请及时绑定邮箱和手机立即绑定

如何在一次操作中从 Hashmap 中获取多个键的多个值?

如何在一次操作中从 Hashmap 中获取多个键的多个值?

皈依舞 2023-07-13 14:09:46
我想使用 获取多个键的值HashMap,例如:HashMap<Integer, String> map = new HashMap<Integer, String>();map.put(1, "Hello");map.put(2, "World");map.put(3, "New");map.put(4, "Old");现在我想组合1和 的值2并创建一个List<String>输出。我可以通过 2 次获取操作或创建一个接受键列表并返回值列表的函数来完成此操作。但是是否有任何内置的util函数可以完成相同的工作?
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

您可以使用Stream

List<Integer> keys = List.of(1,2);
List<String> values = 
    keys.stream()
        .map(map::get)
        .filter(Objects::nonNull) // get rid of null values
        .collect(Collectors.toList());

这将导致List

[Hello, World]


查看完整回答
反对 回复 2023-07-13
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

您可以获取Set包含键的输入来查询和使用流操作Stream#filter,并Stream#map过滤和映射结果,最后将值收集到列表中:

HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Hello");
map.put(2, "World");
map.put(3, "New");
map.put(4, "Old");

Set<Integer> keys = Set.of(1, 2);

List<String> values = map.entrySet()
                         .stream()
                         .filter(ent -> keys.contains(ent.getKey()))
                         .map(Map.Entry::getValue)
                         .collect(Collectors.toList());
System.out.println(values);

输出:

[Hello, World]


查看完整回答
反对 回复 2023-07-13
?
Qyouu

TA贡献1786条经验 获得超11个赞

IntStream.of(1, 2)
        .map(map::get)
        .collect(Collectors.toList());


查看完整回答
反对 回复 2023-07-13
  • 3 回答
  • 0 关注
  • 326 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信