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

时间:2019-09-04 13:03:26

标签: java hash hashmap

我想使用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<String>输出。 我可以通过两次操作来完成此操作,或者创建一个需要键列表并返回值列表的函数。

但是有内置的 util 函数可以完成相同的工作吗?

3 个答案:

答案 0 :(得分:8)

您可以使用Stream s:

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]

答案 1 :(得分:4)

您可以输入Set,该输入具有用于查询并使用流操作Stream#filterStream#map的键来过滤和映射结果,最后将值收集到列表中: / p>

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]

答案 2 :(得分:1)

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