Joh*_*yun 5 java lambda java-8
我有以下内容Map:
HashMap<String, String> map1= new HashMap<String, String>();
map1.put("1", "One");
map1.put("2", "Two");
map1.put("3", "Three");
Run Code Online (Sandbox Code Playgroud)
我有一个numbers包含的列表["1","2","3"]
我必须执行以下操作:
List<String> spelling= new ArrayList<>();
for (String num: numbers) {
if (map1.containsKey(num)){
spelling.add(map1.get(num))
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用lambda表达式编写上述代码?
Era*_*ran 14
使用Stream:
List<String> spelling = numbers.stream()
.map(map1::get)
.filter(Objects::nonNull)
.collect(Collectors.toList());
System.out.println (spelling);
Run Code Online (Sandbox Code Playgroud)
请注意containsKey,我只是使用get,而不是检查键是否在地图中,然后过滤掉了nulls.
输出:
[One, Two, Three]
Run Code Online (Sandbox Code Playgroud)
Eran解决方案的变体:
containsKey而不是检查nullvalues => if map1是否包含null值,检查null值会产生错误的结果.代码片段:
List<String> spelling = numbers.stream()
.filter(map1::containsKey)
.map(map1::get)
.collect(Collectors.toList());
System.out.println (spelling);
Run Code Online (Sandbox Code Playgroud)