我想使用来获取多个键的值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");
Run Code Online (Sandbox Code Playgroud)
现在,我想组合1和的值2并创建一个List<String>输出。我可以通过两次操作来完成此操作,或者创建一个需要键列表并返回值列表的函数。
但是,有没有内置的util函数可以完成相同的工作?
您可以使用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());
Run Code Online (Sandbox Code Playgroud)
这将导致List:
[Hello, World]
Run Code Online (Sandbox Code Playgroud)
您可以获取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);
Run Code Online (Sandbox Code Playgroud)
输出:
[Hello, World]
Run Code Online (Sandbox Code Playgroud)