【发布时间】:2025-12-18 16:20:07
【问题描述】:
我想将此示例迁移到 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");
}
正确的输出:
FrontMiddleBack
我尝试使用 entryset -> 流,但它没有以正确的顺序返回。
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());
输出:
MidleFrontBack
我可以使用 Java 8 获得相同的结果吗?
【问题讨论】:
-
您的原始代码已损坏。
concat()不会修改它所调用的字符串。 -
HashMap是无序的。如果您想保留顺序,请使用LinkedHashMap。 -
我尝试迁移到 java 8。 Java 8 向后兼容。您不必因为更新了 Java 而更改每一行(或任何一行)代码。
标签: java dictionary filter java-8 java-stream