Caa*_* VI 5 java dictionary filter java-8 java-stream
我想将此示例迁移到Java 8:
Map<String, String> data = new HashMap<String, String>() {{
put("name", "Middle");
put("prefix", "Front");
put("postfix", "Back");
}};
String title = "";
if (data.containsKey("prefix")) {
title += data.get("prefix");
}
if (data.containsKey("name")) {
title += data.get("name");
}
if (data.containsKey("postfix")) {
title += data.get("postfix");
}
Run Code Online (Sandbox Code Playgroud)
正确输出:
FrontMiddleBack
Run Code Online (Sandbox Code Playgroud)
我尝试使用entryset - > stream但它没有以正确的顺序返回.
String titles = macroParams.entrySet().stream()
.filter(map -> "name".equals(map.getKey()) || "postfix".equals(map.getKey()) || "prefix".equals(map.getKey()))
.sorted()
.map(Map.Entry::getValue)
.collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)
输出:
MidleFrontBack
Run Code Online (Sandbox Code Playgroud)
我可以使用Java 8获得相同的结果吗?
在这里,溪流有点矫枉过正,IMO.但您仍然可以使用Java 8,以便Map.getOrDefault()
:
String title = data.getOrDefault("prefix", "")
+ data.getOrDefault("name", "")
+ data.getOrDefault("postfix", "");
Run Code Online (Sandbox Code Playgroud)
您可以流式传输所需的键并加入存在的值:
String title = Stream.of("prefix", "name", "postfix")
.filter(data::containsKey)
.map(data::get)
.collect(joining());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
794 次 |
最近记录: |