【问题标题】:How to get multiple values for multiple keys from Hashmap in a single operation?如何在单个操作中从 Hashmap 获取多个键的多个值?
【发布时间】:2019-09-04 13:03:26
【问题描述】:

我想使用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");

现在我想组合 12 的值并创建一个 List&lt;String&gt; 输出。 我可以通过 2 次获取操作或创建一个接受键列表并返回值列表的函数来做到这一点。

但是有没有内置的 util 函数可以做同样的工作?

【问题讨论】:

  • 我可以通过 2 次 get 操作或 创建一个接受键列表并返回值列表的函数来做到这一点。 .. . 这和标记的答案不一样吗?你到底在找什么?

标签: java hash hashmap


【解决方案1】:

你可以使用Streams:

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]

【讨论】:

    【解决方案2】:

    您可以输入 Set 并使用要查询的键并使用流操作 Stream#filterStream#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]
    

    【讨论】:

      【解决方案3】:
      IntStream.of(1, 2)
              .map(map::get)
              .collect(Collectors.toList());
      

      【讨论】:

      • 我建议检查 null,就像 eran 一样。
      猜你喜欢
      • 2019-05-30
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多