我有一个Map
如下
Map<String, Map<String, String>> dateFormatsMap;
Map<String,String> m1 = Map.of("A","DD", "B", "MM", "C","YY");
Map<String,String> m2 = Map.of("A","DD-MM", "X", "MM", "C","YYYY");
Map<String,String> m3 = Map.of("X","DD", "Y", "MM", "C","YY");
dateFormatsMap = Map.of("P2",m2,"P1",m1, "p3",m3);
该图是从DB填充的,具有按项目分类的数据。我想要的是将特定项目和一个默认项目的
Map
合并,如果有重复,则合并,我想保留指定项目的值。 我尝试下面的代码,
private static Map<String, String> getFormats(String project) {
Set<String> projects = Set.of("P1", project); //e.g "P1" as default project
return dateFormatsMap.entrySet().stream()
.filter(e->projects.contains(e.getKey()))
.flatMap(e->e.getValue().entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(o,n)->o));
}
我称这种方法为getFormats("P2");
但这给出了变化的结果,其值有时来自“P1”,有时来自“P1”。{A = DD,B = MM,C = YY,X = MM}
{A = DD-MM,B = MM,C = YYYY,X = MM}
我需要有一个固定的结果,
{A = DD-MM,B = MM,C = YYYY,X = MM}
您可以检查ideone
希望我已经详细说明了这个问题。感谢您的帮助。
最佳答案
一种无需使用Stream
即可解决此问题的方法,您也可以尝试使用putAll
-
private static Map<String, String> getFormats(String project) {
Map<String, String> baseProjFormats = dateFormatsMap.get("P1");
Map<String, String> currentProjFormats = dateFormatsMap.getOrDefault(project, Collections.emptyMap());
baseProjFormats.putAll(currentProjFormats);
return baseProjFormats;
}
关于java - 使用指定键合并嵌套 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61820685/